RosettaCodeData/Task/Nonoblock/Mathematica/nonoblock.math

23 lines
783 B
Plaintext

ClearAll[SpacesDistributeOverN, Possibilities]
SpacesDistributeOverN[s_, p_] :=
Flatten[
Permutations /@ (Join[#, ConstantArray[0, p - Length[#]]] & /@
IntegerPartitions[s, p]), 1]
Possibilities[hint_, len_] :=
Module[{p = hint, l = len, b = Length[hint], Spaces, out},
Spaces = # + (Prepend[Append[ConstantArray[1, b - 1], 0],
0]) & /@ (SpacesDistributeOverN[l - Total@p - (b - 1), b + 1]);
out = Flatten /@ (
Riffle[#, Map[Table[1, {#}] &, p, {1}]] & /@
Map[Table[0, {#}] &, Spaces, {2}]);
StringJoin @@@ (out /. {0 -> ".", 1 -> "#"})
]
Possibilities[{}, len_] := Module[{},
{StringJoin[ConstantArray[".", len]]}
]
Possibilities[{2, 1}, 5]
Possibilities[{}, 5]
Possibilities[{8}, 10]
Possibilities[{2, 3, 2, 3}, 15]
Possibilities[{2, 3}, 5]