aoc2021/d14/d14_2.py

28 lines
697 B
Python
Raw Normal View History

2022-01-02 22:35:19 +00:00
import sys
L = sys.stdin.read().splitlines()
seed = L[0]
L = L[2:]
L = [ l.split() for l in L ]
D = { tuple(k):v for [k,_,v] in L }
def reprpairs(P):
return " ".join(f"{a}{b}:{v}" for ((a,b),v) in P.items())
E = { K:0 for (K,_) in D.items() }
for (a,b) in zip(seed, seed[1:]):
E[(a,b)] += 1
#print(reprpairs(E))
for step in range(40):
F = { K:0 for (K,_) in D.items() }
for ((a,b),v) in E.items():
j = D[(a,b)]
F[(a,j)] += v
F[(j,b)] += v
E = F
#print(step+1,reprpairs(E))
from collections import defaultdict as dfd
S = dfd(int)
for ((a,b),v) in E.items():
S[a]+=v
S[b]+=v
S ={ k:(a+b) for (k,v) in S.items() for (a,b) in [divmod(v,2)] }
print(S, max(S.values())-min(S.values()))