import re lines = (x.strip() for x in open("input.txt")) mem = {} regex_mask = re.compile(r"mask = (.+)") regex_mem = re.compile(r"mem\[(.*)] = (.+)") mask_and = 0 mask_or = -1 for line in lines: match = regex_mask.match(line) if match is not None: mask = match.group(1)[::-1] mask_and = sum(2**i for i, v in enumerate(mask) if v != '0') mask_or = sum(2**i for i, v in enumerate(mask) if v == '1') else: match = regex_mem.match(line) addr, dec = list(map(int, match.groups())) mem[addr] = dec & mask_and | mask_or print(sum(map(lambda x: mem[x], mem)))