63 lines
1.2 KiB
Julia
63 lines
1.2 KiB
Julia
using Pkg
|
|
Pkg.add("Match")
|
|
using Match
|
|
|
|
include("utils.jl")
|
|
|
|
function corrupt(line)
|
|
first, rest... = line
|
|
check = [first]
|
|
for char in rest
|
|
if char in "<{[("
|
|
push!(check, char)
|
|
else
|
|
match, score = @match char begin
|
|
'>' => ('<', 25137)
|
|
'}' => ('{', 1197)
|
|
']' => ('[', 57)
|
|
')' => ('(', 3)
|
|
end
|
|
if last(check) == match
|
|
pop!(check)
|
|
else
|
|
return score
|
|
end
|
|
end
|
|
end
|
|
0
|
|
end
|
|
|
|
function solution10_1()
|
|
sum(map(corrupt, non_empty_lines("10.data")))
|
|
end
|
|
|
|
function fix(line)
|
|
first, rest... = line
|
|
check = [first]
|
|
for char in rest
|
|
if char in "<{[("
|
|
push!(check, char)
|
|
else
|
|
pop!(check)
|
|
end
|
|
end
|
|
value = 0
|
|
for char in reverse(check)
|
|
value *= 5
|
|
value += @match char begin
|
|
'<' => 4
|
|
'{' => 3
|
|
'[' => 2
|
|
'(' => 1
|
|
end
|
|
end
|
|
value
|
|
end
|
|
|
|
function solution10_2()
|
|
values = sort(map(fix, filter(line->corrupt(line)==0, collect(non_empty_lines("10.data")))))
|
|
values[div(length(values), 2)+1]
|
|
end
|
|
|
|
solution10_2()
|