Permutations: Difference between revisions

m
→‎{{header|Sidef}}: minor code improvements and fixes
m (elided redundant header in the task's preamble.)
m (→‎{{header|Sidef}}: minor code improvements and fixes)
Line 4,274:
 
=={{header|Sidef}}==
===Built-in:===
<lang ruby>[1,2,3].permutations { |setp|
say set.join;p
}</lang>
 
===Iterative:===
<lang ruby>func permutationsforperm(callback, arrn) {
var endidx = arr.end;@^n
var idx = 0..end;
 
loop {
callback([arr.@[idx]...]);
 
var p = end;n-1
while (idx[p-1] > idx[p]) {p--p};
p == 0 && return;()
 
var d = p;
idx += idx.splice(p).reverse;
 
while (idx[p-1] > idx[d]) {d++d};
idx[.swap(p-1, d] = idx[d, p-1];)
}
 
return()
}
 
permutationsforperm({|setp| say set.joinp }, list3);</lang>
var list = [1,2,3];
permutations({|set| say set.join }, list);</lang>
 
===Recursive:===
<lang ruby>func permutations(callback, set, perm=[]) {
set.is_empty && callback(perm);
for i in ^set.range.each { |i|
__FUNC__(callback, [set[@(0 .. i-1), @(i+1 .. set.end)]], [perm..., set[i]]);
set[(0 ..^ i)..., (i+1 ..^ set.len)...]
], [perm..., set[i]])
}
return()
}
 
permutations({|setp| say set.joinp }, list[0,1,2]);</lang>
var list = [1,2,3];
permutations({|set| say set.join}, list);</lang>
{{out}}
<pre>
[0, 1, 2]
123
[0, 2, 1]
132
[1, 0, 2]
213
[1, 2, 0]
231
[2, 0, 1]
312
[2, 1, 0]
321
</pre>
 
2,747

edits