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],@_ }
In reply to Re: (Golf as well): List of Partitions
by danger
in thread (Golf as well): List of Partitions
by jynx
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |