Files
advent-of-code-2021/day-14/day-14.py
Pascal Lais 56ee86026d
All checks were successful
continuous-integration/drone/push Build is passing
Update day 14 solution
Tidy up
2021-12-14 09:20:25 +01:00

42 lines
1.2 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
from collections import defaultdict
def solve(input, part, num_cycles):
result = 0
template = input[0].strip()
rules = {k: v
for line in input[2:] for k, v in [line.strip().split(' -> ')]}
counts = defaultdict(int)
for i in range(len(template) - 1):
counts[template[i: i + 2]] += 1
for _ in range(num_cycles):
tmp_cnts = counts.copy()
for k in tmp_cnts:
if k in rules:
c = tmp_cnts[k]
counts[k] -= c
counts[k[0] + rules[k]] += c
counts[rules[k] + k[1]] += c
char_counts = defaultdict(int)
for k in counts:
char_counts[k[0]] += counts[k]
char_counts[k[1]] += counts[k]
char_counts[template[0]] += 1
char_counts[template[-1]] += 1
for k in char_counts:
char_counts[k] //= 2
counts = [char_counts[k] // 2 for k in char_counts]
result = max(counts) - min(counts)
print("Part", part, "result:", result)
input = list()
p = Path(__file__).with_name('input.txt')
with open(p) as f:
input = f.readlines()
solve(input, 1, 10)
solve(input, 2, 40)