Skip to content

Instantly share code, notes, and snippets.

@pgk
Created October 22, 2012 18:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pgk/3933305 to your computer and use it in GitHub Desktop.
Save pgk/3933305 to your computer and use it in GitHub Desktop.
Lua set permutations of N iterator with coroutines
local table = require 'table'
function permutations(N)
local level, set, co = -1, {}, nil
for i = 1, N do set[i] = 0 end
co = coroutine.create(function () permute(set, level, N, 1) end)
return function ()
local _, p = coroutine.resume(co)
return p
end
end
function permute(set, level, N, k)
level = level + 1
set[k] = level
if level == N then
coroutine.yield(set)
else
for i = 1, N do
if set[i] == 0 then
permute(set, level, N, i)
end
end
end
level = level - 1
set[k] = 0
end
return permutations
local table = require 'table'
local permutations = require 'permutations'
for p in permutations(n) do
print(table.concat(p, ' '))
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment