Files
python-aoc-2021/day14/part2.py
Sebastian Seedorf e44d059a88 Day 14
2021-12-14 09:34:40 +01:00

35 lines
930 B
Python

#!/usr/bin/env python3
import re
from collections import Counter
lines = (x.strip() for x in open("input.txt"))
first = next(lines)
combinations = Counter(first[a:a+2] for a in range(len(first)-1))
replacements = dict()
next(lines)
for line in lines:
before, insert = re.match(r"([A-Z]{2}) -> ([A-Z])", line).groups()
replacements[before] = (before[0]+insert, insert+before[1])
print(combinations)
for _ in range(40):
nxt = {}
for before, afters in replacements.items():
for after in afters:
add = combinations.get(before, 0) + nxt.get(after, 0)
if add:
nxt[after] = add
combinations = nxt
print(combinations)
letters = {}
for key, cnt in combinations.items():
letters[key[0]] = letters.get(key[0], 0) + cnt
letters[key[1]] = letters.get(key[1], 0) + cnt
print(letters)
print((max(*letters.values())+1) // 2 - (min(*letters.values())+1) // 2)