Permutations: Difference between revisions

Line 6,193:
swap xs[i], xs[d]
inc c[d]
 
 
iterator inplacePermutations(xs: var seq[int]): var seq[int] =
let n = xs.len
var
# 21! > 2^64, practically enough
c: array[21, int]
i = 0
block outer:
while true:
yield xs
i = 0
while i <= c[i]:
c[i] = 0
i += 1
if i >= n:
break outer
let j = if (i and 1) == 0: 0 else: c[i]
swap(xs[i], xs[j])
c[i] += 1
 
var x = @[1,2,3]