in reply to Re: Pideonholes revisted.
in thread Pideonholes revisited.
Yes. That does it perfectly. (Simple, when someone shows you how :)
#! perl -slw use strict; sub arrange { my( $code, $used, $remaining, $total, $prefix ) = @_; return $code->( @$prefix, $remaining ) if ++$used == $total; arrange( $code, $used, $remaining - $_, $total, [ @$prefix, $_ ] ) + for 1 .. $remaining - ( $total - $used ); } our $cards //= 5; our $holes //= 3; arrange sub { print "[ @_ ]"; }, 0, $cards, $holes, []; arrange sub { print "[ 0 @_ ]"; print "[ @_ 0 ]"; }, 0, $cards, $holes -1, []; arrange sub { print "[ 0 @_ 0 ]"; }, 0, $cards, $holes -2, []; __END__ C:\test>1149981-gf -cards=5 -holes=3 [ 1 1 3 ] [ 1 2 2 ] [ 1 3 1 ] [ 2 1 2 ] [ 2 2 1 ] [ 3 1 1 ] [ 0 1 4 ] [ 1 4 0 ] [ 0 2 3 ] [ 2 3 0 ] [ 0 3 2 ] [ 3 2 0 ] [ 0 4 1 ] [ 4 1 0 ] [ 0 5 0 ]
|
|---|