import re import sys from itertools import product text = sys.stdin.read() mem = {} idem = {'0': '0', '1': '1'} for line in text.splitlines(): typ, val = line.split(' = ') if typ.startswith('mask'): mask = val if typ.startswith('mem'): pos = int(typ[4:-1]) known = f'{int(val):b}'.zfill(len(mask)) string = ''.join(idem.get(c, known[i]) for i, c in enumerate(mask)) mem[pos] = int(string, 2) print(sum(mem.values())) mem = {} idem = {'X': 'X', '1': '1'} for line in text.splitlines(): typ, val = line.split(' = ') if typ.startswith('mask'): mask = val elif typ.startswith('mem'): known = f'{int(typ[4:-1]):b}'.zfill(len(mask)) string = ''.join(idem.get(c, known[i]) for i, c in enumerate(mask)) for gen in map(iter, product('01', repeat=string.count('X'))): tmp = re.sub('X', lambda m: next(gen), string) pos = int(tmp, 2) mem[pos] = int(val) print(sum(mem.values()))