-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday14_code.py
61 lines (53 loc) · 1.71 KB
/
day14_code.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
import re
from itertools import combinations
root = "C:/Users/aiden/Dropbox/git/adventofcode/"
lines = [l.rstrip('\n') for l in open(root + 'day14_input.txt', 'r').readlines()]
flatten = lambda t: [item for sublist in t for item in sublist]
ids = {}
for line in lines:
if 'mask' in line:
mask = re.search("(?<== ).*", line).group(0)
mask = [s for s in mask]
else:
idx = re.search("(?<=\[).*(?=\])", line).group(0)
num = re.search("(?<== ).*", line).group(0)
bits = '{0:036b}'.format(int(num))
bits = [b for b in bits]
num2 = bits.copy()
for i in range(len(mask)):
if mask[i] in ['1', '0']:
num2[i] = mask[i]
ids[idx] = num2
ans = 0
for id in ids.keys():
ans += int(''.join(ids[id]), 2)
print(ans)
## Part 2
ids = {}
combs = {}
for line in lines:
if 'mask' in line:
mask = re.search("(?<== ).*", line).group(0)
mask = [s for s in mask]
else:
idx = re.search("(?<=\[).*(?=\])", line).group(0)
num = re.search("(?<== ).*", line).group(0)
bits = '{0:036b}'.format(int(num))
bits = [b for b in bits]
num2 = bits.copy()
for i in range(len(mask)):
if mask[i] in ['1', 'X']:
num2[i] = mask[i]
num_x = len([x for x in num2 if x == 'X'])
if num_x not in combs.keys():
comb = set(list(combinations([0,1]*num_x*2, num_x)))
combs[num_x] = comb
else:
comb = combs[num_x]
for c in list(comb):
c = list(c)
tmp = [x if x != 'X' else str(c.pop(0)) for x in num2]
ids[int(''.join(tmp),2)] = num
ans = 0
for id in ids.keys():
ans += int(ids[id])