This commit is contained in:
Felix Van der Jeugt 2021-12-12 10:45:16 +01:00
parent bf39b92abb
commit 1feda86093
No known key found for this signature in database
GPG Key ID: 58B209295023754D
2 changed files with 70 additions and 0 deletions

34
day12/part1.lua Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env luajit
require("utils")
require("set")
local graph = {}
local lower = set()
for line in io.lines(arg[3]) do
local a, b = unpack(split(line, "-"))
local as, bs = graph[a] or {}, graph[b] or {}
table.insert(as, b)
table.insert(bs, a)
if string.lower(a) == a then lower:add(a) end
if string.lower(b) == b then lower:add(b) end
graph[a] = as
graph[b] = bs
end
local function backtrack(i, once)
if i == "end" then
return 1
else
local paths = 0
for k, v in pairs(graph[i]) do
if not lower:has(v) or not once:has(v) then
once:add(v)
paths = paths + backtrack(v, once)
once:remove(v)
end
end
return paths
end
end
print(backtrack("start", set({"start"})))

36
day12/part2.lua Executable file
View File

@ -0,0 +1,36 @@
#!/usr/bin/env luajit
require("utils")
require("set")
local graph = {}
local lower = set()
for line in io.lines(arg[3]) do
local a, b = unpack(split(line, "-"))
local as, bs = graph[a] or {}, graph[b] or {}
table.insert(as, b)
table.insert(bs, a)
if string.lower(a) == a then lower:add(a) end
if string.lower(b) == b then lower:add(b) end
graph[a] = as
graph[b] = bs
end
local function backtrack(i, once, smalls)
if i == "end" then
return 1
else
local paths = 0
for k, v in pairs(graph[i]) do
if not lower:has(v) or not once:has(v) then
once:add(v)
paths = paths + backtrack(v, once, smalls)
once:remove(v)
elseif smalls > 0 and v ~= "start" and v ~= "end" then
paths = paths + backtrack(v, once, smalls - 1)
end
end
return paths
end
end
print(backtrack("start", set({"start"}), 1))