Files
python-aoc-2021/day10/part2.py
Sebastian Seedorf 30e7bec871 Day 10
2021-12-10 10:57:14 +01:00

23 lines
590 B
Python

#!/usr/bin/env python3
from functools import reduce
lines = (x.strip() for x in open("input.txt"))
cnt = []
OPEN, CLOSE, PENALTY = "([{<", ")]}>", [1, 2, 3, 4]
MAP_CLOSE, MAP_PENALTY = dict(zip(OPEN, CLOSE)), dict(zip(OPEN, PENALTY))
for line in lines:
success = True
stack = []
for char in line:
if char in OPEN:
stack.append(char)
elif MAP_CLOSE[stack.pop()] != char:
success = False
break
if success:
cnt.append(reduce(lambda p, c: p*5 + MAP_PENALTY[c], stack[::-1], 0))
cnt.sort()
print(cnt[len(cnt) // 2])