Permutations by swapping: Difference between revisions

m
Added the Sidef language
(Added EchoLisp)
m (Added the Sidef language)
Line 1,600:
Perm: [2, 1, 4, 3] Sign: 1
Perm: [2, 1, 3, 4] Sign: -1
</pre>
 
=={{header|Sidef}}==
{{trans|Perl}}
<lang ruby>func perms(xx) {
var perms = [[+1]];
range(1, xx).each { |x|
var sign = -1;
perms.flat_map! { |arr|
var (s, *p) = arr...;
var r = range(0, p.len);
(s < 0 ? r : r.reverse).map {|i|
[sign *= -1, p[0..i-1]..., x, p[i..p.end]...]
};
}
};
perms;
}
 
var n = 4;
perms(n).each { |p|
var s = p.shift;
s > 0 && (s = '+1');
say "#{p.dump} => #{s}";
}</lang>
 
{{out}}
<pre>
[1, 2, 3, 4] => +1
[1, 2, 4, 3] => -1
[1, 4, 2, 3] => +1
[4, 1, 2, 3] => -1
[4, 1, 3, 2] => +1
[1, 4, 3, 2] => -1
[1, 3, 4, 2] => +1
[1, 3, 2, 4] => -1
[3, 1, 2, 4] => +1
[3, 1, 4, 2] => -1
[3, 4, 1, 2] => +1
[4, 3, 1, 2] => -1
[4, 3, 2, 1] => +1
[3, 4, 2, 1] => -1
[3, 2, 4, 1] => +1
[3, 2, 1, 4] => -1
[2, 3, 1, 4] => +1
[2, 3, 4, 1] => -1
[2, 4, 3, 1] => +1
[4, 2, 3, 1] => -1
[4, 2, 1, 3] => +1
[2, 4, 1, 3] => -1
[2, 1, 4, 3] => +1
[2, 1, 3, 4] => -1
</pre>
 
2,747

edits