-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path14a.py
73 lines (59 loc) · 1.7 KB
/
14a.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#Advent of code 2020
# 08/21/21 day 14a
#import copy
import sys
import re
# "{0:b}".format(10)
#f'0b{number:08b}'
def applyMask(mask, val):
newval = val
mask1 = mask.replace("X", "0")
mask1_int = int(mask1, 2)
#print(f"mask1 binary = {mask1_int:b}")
newval |= mask1_int
#print(f"mask1={mask1}, mask1_int={mask1_int}, newval={newval}")
mask0 = mask.replace("X", "1")
mask0_int = ~(int(mask0, 2))
#print(f"mask0 binary = {mask0_int:b}")
#print(f"mask0={mask0}, mask0_int={mask0_int}, newval={newval}")
newval &= ~mask0_int
print(f"mask={mask}, val={val}, newval={newval}")
return newval
filename = "data14.txt"
file = open(filename)
filestr = file.read()
a_list = filestr.split("\n")
maxrows = len(a_list)
#maxcolumns = len(a_list[0])
print(a_list)
print(f"maxrows={maxrows}")
# 36 bits. MSbit on left, LSbit on right
# mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
# mem[8] = 11
mask = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
mem = [0] * 65535
max_mem = 0
for line in a_list:
if line[:7] == "mask = ":
#print(f"mask line: {line}")
temp = line.split(" = ")
mask = temp[1]
print(f"found mask = {mask}")
elif line[:3] == "mem":
#print(f"mem line: {line}")
temp = line.split(" = ")
index_list_str = re.findall(r"\d+", temp[0])
index = int(index_list_str[0])
val = int(temp[1])
print(f"index = {index} val={val}")
newval = applyMask(mask, val)
mem[index] = newval
if index > max_mem:
max_mem = index
else:
print(f"ERROR {line}")
sum = 0
for i in range(65535):
sum += mem[i]
print(f"max_mem = {max_mem}")
print(f"Sum = {sum}")