math is hard (to remember)

cabney cabney at cyberpass.net
Thu Jul 12 21:40:47 CDT 2001


~sdpm~
Anyone have a more succinct way to do this?  Or... faster?  I'm no compsci
guy, but my guess is this is O(NlogN).

=8<===============================================
#! /usr/bin/perl -w
# Finds all the different ways of combining N items, excluding the empty
# set.  So, 2**N - 1 combinations.

use strict;

my @elems = @ARGV;
my ( %elems );

for my $elem ( @elems )
{
	$elems{$elem}++;
}

for my $depth ( 2 .. scalar @elems )
{
	my @existing =	grep { length ($_) == $depth-1 } keys %elems;
	for my $key ( @existing )
	{
		my $last = substr ($key, length($key)-1, 1);
		for my $elem (@elems)
		{
			if ( ord($last) < ord($elem) ) {
				my $new = $key . $elem;
				$elems{$new}++;
			}
		}
	}
}

print "$_\n" for keys %elems;
=8<===============================================

CA
-- 
There was a time
A wind that blew so young
For this could be the biggest sky
And I could have the faintest idea

~sdpm~

The posting address is: san-diego-pm-list at hfb.pm.org

List requests should be sent to: majordomo at hfb.pm.org

If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at happyfunball.pm.org> with the following
command in the body of your email message:

    unsubscribe san-diego-pm-list

If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at happyfunball.pm.org> .
This is the general rule for most mailing lists when you need
to contact a human.




More information about the San-Diego-pm mailing list