in reply to x objects in y containers where all objects are used
You need to choose y-1 divisions in your set of objects.
For your example, that would be:
for my $p0 (1 .. 5-1) { for my $p1 ($p0+1 .. 5-1) { print( substr('12345', 0, $p0), "|", substr('12345', $p0, $p1-$p0), "|", substr('12345', $p1, 5-$p1), "\n", ); }}
The general case requires y-1 nested loops. When you have a variable number of nested loop, Algorithm::Loops's NestedLoops is great:
use Algorithm::Loops qw( NestedLoops ); my $num_objects = 5; my $num_containers = 3; my $str = join('', 1..$num_objects); NestedLoops( [ [ 1 .. $num_objects-1 ], (sub { [ $_[-1]+1 .. $num_objects-1 ] }) x ($num_containers-2) ], sub { my $str = $str; substr($str, $_, 0, '|') for reverse @_; print("$str\n"); }, );
1|2|345 1|23|45 1|234|5 12|3|45 12|34|5 123|4|5
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: x objects in y containers where all objects are used
by Anonymous Monk on Nov 07, 2009 at 23:03 UTC | |
by ikegami (Patriarch) on Nov 07, 2009 at 23:23 UTC |