Initial commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
include("utils.jl")
|
||||
|
||||
function solution12_1()
|
||||
lines = non_empty_lines("12.data")
|
||||
adj_mat = Dict()
|
||||
for line in lines
|
||||
front, back = split(line, "-")
|
||||
push!(get!(adj_mat, front, []), back)
|
||||
push!(get!(adj_mat, back, []), front)
|
||||
end
|
||||
result = []
|
||||
growing = [["start"]]
|
||||
while length(growing) > 0
|
||||
new = []
|
||||
for path in growing
|
||||
for neighbour in get(adj_mat, last(path), 0)
|
||||
if Base.Unicode.isuppercase(neighbour[1])
|
||||
push!(new, [path; neighbour])
|
||||
else
|
||||
if neighbour == "end"
|
||||
push!(result, [path; neighbour])
|
||||
else
|
||||
if !(neighbour in path)
|
||||
push!(new, [path; neighbour])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
growing = new
|
||||
end
|
||||
length(result)
|
||||
end
|
||||
|
||||
function small_twice(path)
|
||||
length(filter(unique(path)) do element
|
||||
Base.Unicode.islowercase(element[1]) && length(filter(==(element), path)) > 1
|
||||
end) > 0
|
||||
end
|
||||
|
||||
|
||||
function solution12_2()
|
||||
lines = non_empty_lines("12.data")
|
||||
adj_mat = Dict()
|
||||
for line in lines
|
||||
front, back = split(line, "-")
|
||||
push!(get!(adj_mat, front, []), back)
|
||||
push!(get!(adj_mat, back, []), front)
|
||||
end
|
||||
result = []
|
||||
growing = [["start"]]
|
||||
while length(growing) > 0
|
||||
new = []
|
||||
for path in growing
|
||||
for neighbour in get(adj_mat, last(path), 0)
|
||||
if Base.Unicode.isuppercase(neighbour[1])
|
||||
push!(new, [path; neighbour])
|
||||
else
|
||||
if neighbour == "end"
|
||||
push!(result, [path; neighbour])
|
||||
else
|
||||
if neighbour != "start" && (!small_twice(path) || !(neighbour in path))
|
||||
push!(new, [path; neighbour])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
growing = new
|
||||
end
|
||||
length(result)
|
||||
end
|
||||
|
||||
solution12_2()
|
||||
Reference in New Issue
Block a user