Ordered partitions: Difference between revisions

Added 11l
m (→‎{{header|Haskell}}: Tidied (applied Ormolu and Hlint to last example))
(Added 11l)
Line 48:
<math>\mathit{arg}_1,\mathit{arg}_2,...,\mathit{arg}_n</math> are the arguments — natural numbers — that the sought function receives.
<br><br>
 
=={{header|11l}}==
{{trans|Nim}}
 
<lang 11l>F partitions(lengths)
[[[Int]]] r
[(Int, Int)] slices
V delta = -1
V idx = 0
L(length) lengths
assert(length >= 0, ‘lengths must not be negative.’)
delta += length
slices.append((idx, delta))
idx += length
 
V n = sum(lengths)
V perm = Array(1 .. n)
 
L
[[Int]] part
L(start, end) slices
V s = perm[start .< end + 1]
I !s.is_sorted()
L.break
part.append(s)
L.was_no_break
r.append(part)
 
I !perm.next_permutation()
L.break
 
R r
 
F toString(part)
V result = ‘(’
L(s) part
I result.len > 1
result ‘’= ‘, ’
result ‘’= ‘{’s.join(‘, ’)‘}’
R result‘)’
 
F displayPermutations(lengths)
print(‘Ordered permutations for (’lengths.join(‘, ’)‘):’)
L(part) partitions(lengths)
print(toString(part))
 
:start:
I :argv.len > 1
displayPermutations(:argv[1..].map(Int))
E
displayPermutations([2, 0, 2])</lang>
 
{{out}}
<pre>
Ordered permutations for (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})
 
Ordered permutations for (1, 1, 1):
({1}, {2}, {3})
({1}, {3}, {2})
({2}, {1}, {3})
({2}, {3}, {1})
({3}, {1}, {2})
({3}, {2}, {1})
</pre>
 
=={{header|Ada}}==
1,453

edits