-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday14.py
executable file
·79 lines (73 loc) · 2.45 KB
/
day14.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
74
75
76
77
78
79
#!/usr/bin/python3
# Het kan niet veel lelijker.
# Het kan niet veel lelijker.
# Het kan niet veel lelijker.
# Het kan niet veel lelijker.
#Part1
addressess = [0]
values = [0]
mask = 0
def apply_mask(mask,value):
Xmask = mask.replace("1","0")
Ymask = int(mask.replace("X","0"),2)
Xmask = int(Xmask.replace("X","1"),2)
return ((value & Xmask) | Ymask) & 68719476735
with open('day14.dat') as f:
for i in f:
flag = False
i = i.strip()
if "mask = " in i:
mask = i.replace("mask = ","")
elif "mem[" in i:
address = (int(i[4:].partition("]")[0]))
value = int(i.partition("= ")[2])
for k, j in enumerate(addressess):
if j == address:
flag = True
break;
if flag:
values[k] = apply_mask(mask,value)
else:
addressess.append(address)
values.append(apply_mask(mask,value))
print(f"part1 {sum(values)}")
# Part2 Het kan niet veel lelijker.
memory = {}
mask = ""
base_mask = 0
addition_mask = 0
Xs_mask_collection = 0
import itertools
with open('day14.dat') as ft:
for i in ft:
flag = False
i = i.strip()
if "mask = " in i:
mask = i.replace("mask = ","")
addition_mask = int(mask.replace("X","0"),2)
base_mask = mask.replace("1","X")
base_mask = base_mask.replace("0","1")
base_mask = int(base_mask.replace("X","0"),2)
Xs_mask = mask.replace("1","0")
Xs_mask_collection = []
for k in range(2**Xs_mask.count('X')):
Xss = format(k, '036b')
mout = []
count = 1
for XS in Xs_mask:
if XS == 'X':
mout.append(Xss[-count])
count+=1
else:
mout.append(XS)
mout = ''.join(mout)
Xs_mask_collection.append(int(mout,2))
elif "mem[" in i:
address = int(i[4:].partition("]")[0])
address = (( address & base_mask) | addition_mask) & 68719476735
value = int(i.partition("= ")[2])
for Xmas in Xs_mask_collection:
Newnew_address = address | Xmas
memory[Newnew_address] = value
e
print(f"part2 {sum(memory.values())}")