#!/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))