in reply to (Golf as well): List of Partitions
Well, if I'm allowed to generate a list of strings rather than a list of lists, then I'll kick off the golfing with a strict compliant one in 70 characters (inside of P):
#!/usr/bin/perl -w use strict; sub P { my($i)=@_;push@_,grep!/[^1-$i]/,map"$i$_",P($_[0]-$i)and$i--while$i;@_ } for(P(5)){ print "$_\n"; } __END__ # output is 5 41 32 311 221 2111 11111
If you do insist on a list of lists, we can tack on the following 16 character wrapper sub to call instead of P:
sub W{map{[split//]}&P}
Update: In response to my major oversight that tilly's
followup points out, all I can say is:
"Rats! Last time I go golfing in the middle of the night!"
:-)
Update2:Ok, in the light of day, here's a recursive one in 82 chars (ignoring unnecessary whitespace) that returns a list of lists:
sub P{ my$i=my$n=pop; push@_,grep{!grep{$_>$i}@$_}map{[$i,@$_]}P($n-$i)while$i-->1; [$n],@_ }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re (tilly) 2: (Golf as well): List of Partitions
by tilly (Archbishop) on May 06, 2001 at 16:06 UTC | |
by danger (Priest) on May 07, 2001 at 00:52 UTC | |
by tilly (Archbishop) on May 07, 2001 at 01:04 UTC | |
by jynx (Priest) on May 07, 2001 at 09:39 UTC | |
by tilly (Archbishop) on May 07, 2001 at 15:35 UTC |
In Section
Seekers of Perl Wisdom