Files
aoc_2020_python/14/14.py
T
2021-05-12 21:46:20 +03:00

47 lines
1.2 KiB
Python

from itertools import product
with open("input") as f:
commands = f.read().strip().split("\n")
print(len(commands))
def prepare_command(c):
a, b = c.split(" = ")
if a == "mask":
return ("mask", (b,))
m = int(a[4:-1])
b = int(b)
return ("mem", (m, b))
commands = [prepare_command(command) for command in commands]
mem = {}
for op, par in commands:
if op=="mask":
m, = par
or_mask = int(m.replace('X', "0"), base=2)
and_mask = int(m.replace("X", "1"), base=2)
elif op=="mem":
add, val = par
val = val & and_mask | or_mask
mem[add] = val
else:
print("error")
print(sum(mem.values()))
mem = {}
for op, par in commands:
if op=="mask":
mask, = par
elif op=="mem":
add, val = par
for comb in product(["0", "1"], repeat=mask.count("X")):
or_mask = int(mask.replace("X", "0"), base=2)
and_mask = int(mask.replace("0", "1").replace("X", "0"), base=2)
_mask = int(mask.replace("X", "{}").format(*comb), base=2)
_add = (add | or_mask) & and_mask | _mask
mem[_add] = val
else:
print("error")
print(sum(mem.values()))