Permutations: Difference between revisions
Content added Content deleted
m (Added the Sidef language) |
|||
Line 3,575: | Line 3,575: | ||
3 1 2 |
3 1 2 |
||
3 2 1 |
3 2 1 |
||
</pre> |
|||
=={{header|Sidef}}== |
|||
Built-in: |
|||
<lang ruby>[1,2,3].permutations { |set| |
|||
say set.join; |
|||
};</lang> |
|||
Iterative: |
|||
<lang ruby>func permutations(callback, arr) { |
|||
var end = arr.end; |
|||
var idx = 0..end; |
|||
loop { |
|||
callback(arr[idx]); |
|||
var p = end; |
|||
while (idx[p-1] > idx[p]) {p--}; |
|||
p == 0 && return; |
|||
var d = p; |
|||
idx += idx.splice(p).reverse; |
|||
while (idx[p-1] > idx[d]) {d++}; |
|||
idx[p-1, d] = idx[d, p-1]; |
|||
} |
|||
} |
|||
var list = [1,2,3]; |
|||
permutations({ |set| say set.join }, list);</lang> |
|||
Recursive: |
|||
<lang ruby>func permutations(callback, set, perm=[]) { |
|||
set.len == 0 && callback(perm); |
|||
0 ... set.end -> each { |i| |
|||
__FUNC__(callback, set[(0 .. i-1) + (i+1 .. set.end)], [perm..., set[i]]); |
|||
} |
|||
}; |
|||
var list = [1,2,3]; |
|||
permutations({|set| say set.join}, list);</lang> |
|||
{{out}} |
|||
<pre> |
|||
123 |
|||
132 |
|||
213 |
|||
231 |
|||
312 |
|||
321 |
|||
</pre> |
</pre> |
||