29 lines
751 B
Plaintext
29 lines
751 B
Plaintext
FixedPartitions := function(arg)
|
|
local aux;
|
|
aux := function(i, u)
|
|
local r, v, w;
|
|
if i = Size(arg) then
|
|
return [[u]];
|
|
else
|
|
r := [ ];
|
|
for v in Combinations(u, arg[i]) do
|
|
for w in aux(i + 1, Difference(u, v)) do
|
|
Add(r, Concatenation([v], w));
|
|
od;
|
|
od;
|
|
return r;
|
|
fi;
|
|
end;
|
|
return aux(1, [1 .. Sum(arg)]);
|
|
end;
|
|
|
|
|
|
FixedPartitions(2, 0, 2);
|
|
# [ [ [ 1, 2 ], [ ], [ 3, 4 ] ], [ [ 1, 3 ], [ ], [ 2, 4 ] ],
|
|
# [ [ 1, 4 ], [ ], [ 2, 3 ] ], [ [ 2, 3 ], [ ], [ 1, 4 ] ],
|
|
# [ [ 2, 4 ], [ ], [ 1, 3 ] ], [ [ 3, 4 ], [ ], [ 1, 2 ] ] ]
|
|
|
|
FixedPartitions(1, 1, 1);
|
|
# [ [ [ 1 ], [ 2 ], [ 3 ] ], [ [ 1 ], [ 3 ], [ 2 ] ], [ [ 2 ], [ 1 ], [ 3 ] ],
|
|
# [ [ 2 ], [ 3 ], [ 1 ] ], [ [ 3 ], [ 1 ], [ 2 ] ], [ [ 3 ], [ 2 ], [ 1 ] ] ]
|