mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
34 lines
619 B
Nim
34 lines
619 B
Nim
|
|
# bug #3221
|
|
|
|
import algorithm, math, sequtils
|
|
|
|
|
|
iterator permutations[T](ys: openarray[T]): seq[T] =
|
|
var
|
|
d = 1
|
|
c = newSeq[int](ys.len)
|
|
xs = newSeq[T](ys.len)
|
|
for i, y in ys: xs[i] = y
|
|
yield xs
|
|
block outer:
|
|
while true:
|
|
while d > 1:
|
|
dec d
|
|
c[d] = 0
|
|
while c[d] >= d:
|
|
inc d
|
|
if d >= ys.len: break outer
|
|
let i = if (d and 1) == 1: c[d] else: 0
|
|
swap xs[i], xs[d]
|
|
yield xs
|
|
inc c[d]
|
|
|
|
proc dig_vectors(): void =
|
|
var v_nums: seq[int]
|
|
v_nums = newSeq[int](1)
|
|
for perm in permutations(toSeq(0 .. 1)):
|
|
v_nums[0] = 1
|
|
|
|
dig_vectors()
|