20 lines
596 B
Python
Executable File
20 lines
596 B
Python
Executable File
#!/usr/bin/python3
|
|
import re
|
|
|
|
mem = []
|
|
with open("input") as fh:
|
|
for ln in fh:
|
|
if m := re.match(r"mask = ([01X]{36})", ln):
|
|
mask = m.group(1)
|
|
mask_and = int(mask.replace("1", "0").replace("X", "1"), base=2)
|
|
mask_or = int(mask.replace("X", "0"), base=2)
|
|
elif m:= re.match(r"mem\[(\d+)\] = (\d+)", ln):
|
|
i = int(m.group(1))
|
|
v = int(m.group(2))
|
|
while i >= len(mem):
|
|
mem.append(0)
|
|
mem[i] = (v & mask_and) | mask_or
|
|
else:
|
|
raise RuntimeError(ln)
|
|
print(sum(mem))
|