aoc2023/d15/part2.py

27 lines
530 B
Python

import sys
def hash(l):
c = 0
for w in l:
c += ord(w)
c *= 17
c = c % 256
return c
B = [ dict() for _ in range(256) ]
for l in sys.stdin.read().split(','):
e = l.find('=')
d = l.find('-')
i = max(e,d)
lbl = l[:i]
box = hash(lbl)
if e > 0: # set
v = int(l[i+1:])
B[box][lbl] = v
elif d > 0: # remove
if lbl in B[box]:
del B[box][lbl]
print(sum((i+1)*(j+1)*v for i, b in enumerate(B) for j,(k,v) in enumerate(b.items())))