Files
aoc2024/05/05.py
T
Fedor Lyanguzov 2fb37ad3e0 05.1, 05.2 python
2024-12-05 14:18:47 +03:00

43 lines
894 B
Python

from collections import defaultdict
from itertools import permutations
data1, data2 = open('input.txt').read().strip().split("\n\n")
rules = defaultdict(list)
for x in data1.split('\n'):
v, k = x.split('|')
rules[k].append(v)
chains = [x.split(",") for x in data2.split('\n')]
def correct(c):
for i, k in enumerate(c):
y = c[i+1:]
if any(x in y for x in rules[k]):
return False
return True
s = 0
incorrect = []
for c in chains:
if correct(c):
s += int(c[len(c)//2])
else:
incorrect.append(c)
print(s)
s = 0
for c in incorrect:
while not correct(c):
nc = []
for i, k in enumerate(c):
n = [x for x in rules[k] if x in set(c[i+1:])]
for x in n:
c.remove(x)
nc.extend(n)
nc.append(k)
c = nc
s += int(c[len(c)//2])
print(s)