22 lines
470 B
Lua
22 lines
470 B
Lua
local wrap, yield = coroutine.wrap, coroutine.yield
|
|
local function perm(n)
|
|
local r = {}
|
|
for i=1,n do r[i]=i end
|
|
local sign = 1
|
|
return wrap(function()
|
|
local function swap(m)
|
|
if m==0 then
|
|
sign = -sign, yield(sign,r)
|
|
else
|
|
for i=m,1,-1 do
|
|
r[i],r[m]=r[m],r[i]
|
|
swap(m-1)
|
|
r[i],r[m]=r[m],r[i]
|
|
end
|
|
end
|
|
end
|
|
swap(n)
|
|
end)
|
|
end
|
|
for sign,r in perm(3) do print(sign,table.unpack(r))end
|