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()
|