20 lines
681 B
Python
20 lines
681 B
Python
from collections import defaultdict
|
|
|
|
input = [line.strip() for line in open('/home/bandeira/git.bandeira/aoc/2024/day05/input.day05') if line.strip()]
|
|
|
|
rules = defaultdict(set)
|
|
for line in input:
|
|
if '|' in line:
|
|
a, b = map(int, line.split('|'))
|
|
rules[a].add(b)
|
|
|
|
updates = [list(map(int, line.split(','))) for line in input if ',' in line]
|
|
|
|
is_correct = lambda u: all(not (set(u[:i]) & rules[u[i]]) for i in range(len(u)))
|
|
|
|
ans1 = sum(u[len(u) // 2] for u in updates if is_correct(u))
|
|
|
|
ans2 = sum(next(n for n in update if len(rules[n] & set(update)) == len(update) // 2)
|
|
for update in updates if not is_correct(update))
|
|
|
|
print(f"{ans1}\n{ans2}") |