1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- lines = []
- with open("14.input") as f:
- for line in f.readlines():
- lines.append(line.strip())
- andmask = ormask = 0
- mask = ""
- mem = {}
- for line in lines:
- if line[0:4] == "mask":
- mask = line.split(" ")[2]
- andmask = int(mask.replace("X", "1"), 2)
- ormask = int(mask.replace("X", "0"), 2)
- else:
- line = line.split(" ")
- addr = int(line[0][4:-1])
- val_orig = int(line[2])
- val = (val_orig & andmask) | ormask
- mem[addr] = val
- print("Answer 1: {}".format(sum(mem.values())))
- mem = {}
- floating = []
- for line in lines:
- if line[0:4] == "mask":
- mask = line.split(" ")[2]
- ormask = int(mask.replace("X", "0"), 2)
- floating = []
- for (i, c) in enumerate(mask):
- if c == 'X':
- floating.append(35 - i)
- else:
- line = line.split(" ")
- addr = int(line[0][4:-1])
- addr |= ormask
- val = int(line[2])
- for num in range(0, 2 ** len(floating)):
- my_addr = addr
- for (j, index) in enumerate(floating):
- if (num >> j) & 1:
- my_addr |= 1 << index
- else:
- my_addr &= (0xFFFFFFFFF ^ (1 << index))
- mem[my_addr] = val
- print("Answer 2: {}".format(sum(mem.values())))
|