advent-of-code-2024/day-5/main.jl

43 lines
1.0 KiB
Julia

function parse_input()
rules = []
manuals = []
open("input.txt") do f
for line in readlines(f)
if length(line) == 0
continue
end
if '|' in line
num1, num2 = split(line, '|')
push!(rules, (parse(Int, num1), parse(Int, num2)))
else
push!(manuals, map(s -> parse(Int, s), split(line, ',')))
end
end
end
return rules, manuals
end
function check_rules(rules, page)
for (n1, n2) in rules
if !(n1 in page) || !(n2 in page)
continue
end
n1_pos = findfirst(item -> item == n1, page)
n2_pos = findfirst(item -> item == n2, page)
if n1_pos > n2_pos
return 0
end
end
return page[(length(page) ÷ 2) + 1]
end
function main()
rules, manuals = parse_input()
result = sum(map(m -> check_rules(rules, m), manuals))
println(result)
end
if abspath(PROGRAM_FILE) == @__FILE__
main()
end