RosettaCodeData/Task/Permutations-by-swapping/Sidef/permutations-by-swapping.sidef

23 lines
404 B
Text
Raw Permalink Normal View History

2016-12-05 23:44:36 +01:00
func perms(n) {
var perms = [[+1]]
2017-09-23 10:01:46 +02:00
for x in (1..n) {
var sign = -1
2016-12-05 23:44:36 +01:00
perms = gather {
for s,*p in perms {
2017-09-23 10:01:46 +02:00
var r = (0 .. p.len)
2016-12-05 23:44:36 +01:00
take((s < 0 ? r : r.flip).map {|i|
2017-09-23 10:01:46 +02:00
[sign *= -1, p[^i], x, p[i..p.end]]
2016-12-05 23:44:36 +01:00
}...)
}
}
}
2017-09-23 10:01:46 +02:00
perms
2016-12-05 23:44:36 +01:00
}
2017-09-23 10:01:46 +02:00
var n = 4
2016-12-05 23:44:36 +01:00
for p in perms(n) {
var s = p.shift
s > 0 && (s = '+1')
say "#{p} => #{s}"
}