Jump to content

Permutations: Difference between revisions

m
Added the Sidef language
m (Added the Sidef language)
Line 3,575:
3 1 2
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>
 
2,747

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.