Permutations by swapping: Difference between revisions

Content added Content deleted
m (added whitespace before TOC.)
m (→‎{{header|Sidef}}: minor code improvements)
Line 1,711: Line 1,711:
=={{header|Sidef}}==
=={{header|Sidef}}==
{{trans|Perl}}
{{trans|Perl}}
<lang ruby>func perms(xx) {
<lang ruby>func perms(n) {
var perms = [[+1]];
var perms = [[+1]]
range(1, xx).each { |x|
n.times { |x|
var sign = -1;
var sign = -1;
perms.flat_map! { |arr|
perms = gather {
var (s, *p) = arr...;
for s,*p in perms {
var r = range(0, p.len);
var r = (0 .. p.len);
(s < 0 ? r : r.reverse).map {|i|
take((s < 0 ? r : r.flip).map {|i|
[sign *= -1, p.@[0..i-1], x, p.@[i..p.end]]
[sign *= -1, p[0..i-1], x, p[i..p.end]]
}
}...)
}
}
}
}
}
Line 1,727: Line 1,728:


var n = 4;
var n = 4;
perms(n).each { |p|
for p in perms(n) {
var s = p.shift;
var s = p.shift
s > 0 && (s = '+1');
s > 0 && (s = '+1')
say "#{p.dump} => #{s}";
say "#{p} => #{s}"
}</lang>
}</lang>