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