Day A Dozen
parent
e26833939c
commit
df299186e3
@ -0,0 +1,4 @@
|
|||||||
|
name = "day12"
|
||||||
|
uuid = "8b45b4a1-93ce-4a08-b654-2545c47524be"
|
||||||
|
authors = ["HeNine "]
|
||||||
|
version = "0.1.0"
|
@ -0,0 +1,7 @@
|
|||||||
|
start-A
|
||||||
|
start-b
|
||||||
|
A-c
|
||||||
|
A-b
|
||||||
|
b-d
|
||||||
|
A-end
|
||||||
|
b-end
|
@ -0,0 +1,10 @@
|
|||||||
|
dc-end
|
||||||
|
HN-start
|
||||||
|
start-kj
|
||||||
|
dc-start
|
||||||
|
dc-HN
|
||||||
|
LN-dc
|
||||||
|
HN-end
|
||||||
|
kj-sa
|
||||||
|
kj-HN
|
||||||
|
kj-dc
|
@ -0,0 +1,18 @@
|
|||||||
|
fs-end
|
||||||
|
he-DX
|
||||||
|
fs-he
|
||||||
|
start-DX
|
||||||
|
pj-DX
|
||||||
|
end-zg
|
||||||
|
zg-sl
|
||||||
|
zg-pj
|
||||||
|
pj-he
|
||||||
|
RW-he
|
||||||
|
fs-DX
|
||||||
|
pj-RW
|
||||||
|
zg-RW
|
||||||
|
start-pj
|
||||||
|
he-WI
|
||||||
|
zg-he
|
||||||
|
pj-fs
|
||||||
|
start-RW
|
@ -0,0 +1,21 @@
|
|||||||
|
TR-start
|
||||||
|
xx-JT
|
||||||
|
xx-TR
|
||||||
|
hc-dd
|
||||||
|
ab-JT
|
||||||
|
hc-end
|
||||||
|
dd-JT
|
||||||
|
ab-dd
|
||||||
|
TR-ab
|
||||||
|
vh-xx
|
||||||
|
hc-JT
|
||||||
|
TR-vh
|
||||||
|
xx-start
|
||||||
|
hc-ME
|
||||||
|
vh-dd
|
||||||
|
JT-bm
|
||||||
|
end-ab
|
||||||
|
dd-xx
|
||||||
|
end-TR
|
||||||
|
hc-TR
|
||||||
|
start-vh
|
@ -0,0 +1,97 @@
|
|||||||
|
include("../../AoC2021.jl")
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
function parsefile(file)
|
||||||
|
pairs = map(eachline(file)) do line
|
||||||
|
split(line, "-") |>
|
||||||
|
p -> (p[1], p[2])
|
||||||
|
end
|
||||||
|
|
||||||
|
nodes = (pairs .|> ((x, y),) -> [x, y]) |>
|
||||||
|
(x -> vcat(x...)) |>
|
||||||
|
(x -> filter(x -> x ∉ ["start", "end"], x)) |>
|
||||||
|
unique |>
|
||||||
|
x -> ["start", x..., "end"]
|
||||||
|
|
||||||
|
bigcaves = map(x -> all(isuppercase.(collect(x))), nodes)
|
||||||
|
|
||||||
|
graph = zeros(Int, length(nodes), length(nodes))
|
||||||
|
|
||||||
|
for (x, y) in pairs
|
||||||
|
graph[findfirst(nodes .== x), findfirst(nodes .== y)] = 1
|
||||||
|
graph[findfirst(nodes .== y), findfirst(nodes .== x)] = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
(nodes, bigcaves, graph)
|
||||||
|
end
|
||||||
|
|
||||||
|
function findpaths(currentnode, nodes, bigcaves, graph, visited, path)
|
||||||
|
path = [path..., currentnode]
|
||||||
|
|
||||||
|
if currentnode == "end"
|
||||||
|
return [path]
|
||||||
|
end
|
||||||
|
|
||||||
|
currentnodeindex = nodes .== currentnode
|
||||||
|
|
||||||
|
if currentnodeindex' * bigcaves == 0
|
||||||
|
visited = [visited..., currentnode]
|
||||||
|
end
|
||||||
|
|
||||||
|
findall(graph * currentnodeindex .> 0) .|>
|
||||||
|
(x -> nodes[x]) |>
|
||||||
|
(x -> filter(x -> x ∉ visited, x)) .|>
|
||||||
|
(x -> findpaths(x, nodes, bigcaves, graph, visited, path)) |>
|
||||||
|
(x -> vcat(x...))
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
function task0(file)
|
||||||
|
(nodes, bigcaves, graph) = parsefile(file)
|
||||||
|
|
||||||
|
findpaths("start", nodes, bigcaves, graph, [], []) |> length
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
verify(12, 1, 0, 10)
|
||||||
|
verify(12, 1, 1, 19)
|
||||||
|
verify(12, 1, 2, 226)
|
||||||
|
verify(12, 1, 3, 5157)
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
function findpaths2(currentnode, nodes, bigcaves, graph, visited, path, visitedtwice = false)
|
||||||
|
path = [path..., currentnode]
|
||||||
|
|
||||||
|
if currentnode == "end"
|
||||||
|
return [path]
|
||||||
|
end
|
||||||
|
|
||||||
|
currentnodeindex = nodes .== currentnode
|
||||||
|
|
||||||
|
visitedtwice = currentnode ∈ visited || visitedtwice
|
||||||
|
|
||||||
|
if currentnodeindex' * bigcaves == 0
|
||||||
|
visited = [visited..., currentnode]
|
||||||
|
end
|
||||||
|
|
||||||
|
findall(graph * currentnodeindex .> 0) .|>
|
||||||
|
(x -> nodes[x]) |>
|
||||||
|
(x -> filter(x -> !visitedtwice && x != "start" || x ∉ visited, x)) .|>
|
||||||
|
(x -> findpaths2(x, nodes, bigcaves, graph, visited, path, visitedtwice)) |>
|
||||||
|
(x -> vcat(x...))
|
||||||
|
end
|
||||||
|
|
||||||
|
function task1(file)
|
||||||
|
(nodes, bigcaves, graph) = parsefile(file)
|
||||||
|
|
||||||
|
findpaths2("start", nodes, bigcaves, graph, [], []) |> length
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
|
||||||
|
verify(12, 2, 0, 36)
|
||||||
|
@profview verify(12, 2, 3, 144309)
|
Loading…
Reference in New Issue