Compare commits
No commits in common. "master" and "master" have entirely different histories.
@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from collections import Counter
|
||||
|
||||
|
||||
def part1(adapters):
|
||||
counts = Counter()
|
||||
# 1 for the socket, of 3 for the device
|
||||
for current, next in zip([0] + adapters, adapters + [3]):
|
||||
counts[next - current] += 1
|
||||
return counts[1] * counts[3]
|
||||
|
||||
|
||||
def part2(adapters):
|
||||
counts = Counter({0: 1})
|
||||
for jolt in adapters:
|
||||
s = counts[jolt - 1] + counts[jolt - 2] + counts[jolt - 3]
|
||||
counts[jolt] = s
|
||||
return max(counts.values())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
adapters = sorted(int(l.rstrip()) for l in open("input.txt"))
|
||||
print(part1(adapters))
|
||||
print(part2(adapters))
|
@ -1,99 +0,0 @@
|
||||
151
|
||||
94
|
||||
14
|
||||
118
|
||||
25
|
||||
143
|
||||
33
|
||||
23
|
||||
80
|
||||
95
|
||||
87
|
||||
44
|
||||
150
|
||||
39
|
||||
148
|
||||
51
|
||||
138
|
||||
121
|
||||
70
|
||||
69
|
||||
90
|
||||
155
|
||||
144
|
||||
40
|
||||
77
|
||||
8
|
||||
97
|
||||
45
|
||||
152
|
||||
58
|
||||
65
|
||||
63
|
||||
128
|
||||
101
|
||||
31
|
||||
112
|
||||
140
|
||||
86
|
||||
30
|
||||
55
|
||||
104
|
||||
135
|
||||
115
|
||||
16
|
||||
26
|
||||
60
|
||||
96
|
||||
85
|
||||
84
|
||||
48
|
||||
4
|
||||
131
|
||||
54
|
||||
52
|
||||
139
|
||||
76
|
||||
91
|
||||
46
|
||||
15
|
||||
17
|
||||
37
|
||||
156
|
||||
134
|
||||
98
|
||||
83
|
||||
111
|
||||
72
|
||||
34
|
||||
7
|
||||
108
|
||||
149
|
||||
116
|
||||
32
|
||||
110
|
||||
47
|
||||
157
|
||||
75
|
||||
13
|
||||
10
|
||||
145
|
||||
1
|
||||
127
|
||||
41
|
||||
53
|
||||
2
|
||||
3
|
||||
117
|
||||
71
|
||||
109
|
||||
105
|
||||
64
|
||||
27
|
||||
38
|
||||
59
|
||||
24
|
||||
20
|
||||
124
|
||||
9
|
||||
66
|
@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from rules import part1_rules
|
||||
|
||||
|
||||
def main(grid, rules):
|
||||
generation = 0
|
||||
while True:
|
||||
changes, next_grid = step(grid, rules)
|
||||
generation += 1
|
||||
grid = next_grid
|
||||
assert generation < 1000
|
||||
if changes == 0:
|
||||
return next_grid.count("#")
|
||||
|
||||
|
||||
def step(grid, rules):
|
||||
changes = 0
|
||||
next_grid = grid[:]
|
||||
for index, cell in enumerate(grid):
|
||||
try:
|
||||
changes += rules[cell](index, grid, next_grid)
|
||||
except KeyError:
|
||||
pass
|
||||
return changes, next_grid
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("input.txt") as infile:
|
||||
grid = list("".join(infile.read().splitlines()))
|
||||
print("Part 1 ", main(grid, rules=part1_rules))
|
||||
|
||||
# print("Part 2 ", main(grid, rules={"L": handle_empty_2, "#": handle_occupied_2}))
|
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
class Grid:
|
||||
def __init__(self, inp):
|
||||
lines = inp.read().splitlines()
|
||||
self.cells = list("".join(lines))
|
||||
self.height = len(lines)
|
||||
self.width = len(lines[0])
|
||||
|
||||
def __getitem__(self, key):
|
||||
x, y = key
|
||||
return cells[y * self.width + x]
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
x, y = key
|
||||
cells[y * self.width + x] = value
|
||||
|
||||
def __iter__(self):
|
||||
return self.cells.__iter__()
|
||||
|
||||
def __str__(self):
|
||||
"\n".join(
|
||||
"".join(
|
||||
grid[pos : pos + grid_width]
|
||||
for pos in range(0, self.width, self.height)
|
||||
)
|
||||
)
|
@ -1,97 +0,0 @@
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLLLL.LLL..LLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL..LLLLLLL..LLLL
|
||||
LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLLLL.LLLLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL..LLLLLLLLL.LLLLLLL..LLLL
|
||||
.LLL.LL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LL.LLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL
|
||||
......L........LLL....L.L......L.LL...L.....L.LL..L..L..L..LLL..LL......L...L.LL.L.L....L.........
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLL.L.LLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLL.LL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLL..LLLLLLL.LLLLLLLLLLLLLL.LLL.LLL..LLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLL.LLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLLLLL.LLLL.L.LLL.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLL.L.LLLLLLL.LLLLLL.LL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLL.L.L..LLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL
|
||||
.L....LLLL.LL.LL..L.L.L.L.LL..L..L.LLLLLL.L.LLLL.L.L..LL...L..L..LLL.....L........LL.L..L..L..L..L
|
||||
LLLLLLL.LLLLLLL.LLLLL.LLL.LLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL..LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLL.L
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLL.LL.LLLLL
|
||||
.....L..L...L.L.L..........L..LLLL....L..L.L..LLLL...L..L....L.LL.L....L.L.L....LL.L..L......LLL.L
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LL.LLLLLL.LL.LLLL.LLLLL
|
||||
LLLLLLL.L.LLLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.L.LL.LLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.L..LLLLLLLLLLL.L
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.L.LLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.L.LLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LL.LLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.L.LLLLLLL.LLLLL
|
||||
L.LLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLL
|
||||
..L...L...L......L.LLLL.....LLL.L.LLLLLL.L.L.L..L.L.......L.L..L...L.L.L....LL...L.LL......LL.L.L.
|
||||
LLLLLLL.LLLLLLL.L.LLLLLLL.LLLLL.LLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL..LLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLL.L.LLLLL.LLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LL.LLLLLL..LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLLL.LLLL.LL.LLLLL
|
||||
LL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLL.LL.LLLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLL.LLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
L.L.......L.L....LL......LL.LL...LL..L...........L.....LLL....L..LL.LL.L.L.LL.......L.L...L....L..
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LL.LL.LLLLLLLLLLLLLLLLL.LLL.L
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL..LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.L..LL.LLL.LLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLLLLL.LLLL.LLLLLLL.LLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
L.LLLLLLLLLLLLL.LL.LLLLLL.LLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LL.LLLL.LLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLL
|
||||
...LL.L..LL...L.......L.LL.......LL.LLL.L.LLL...L..LLL.L...L.......LL.LL.LL.L..LL........L.......L
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLL.L..LLLL.LLLLLLLLL.LLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLL..LLLLLLLLLLLLLLL..LL.LL.L.LLL.LLL.LLLLLLL.LLLLL
|
||||
LLLLL..LLLL.LLLLLLLLLLLLL.LLLLLLLL.L.LLLLLLLL.LLLL.LLLLLLLLL.L.LLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLL.L.LLLLL
|
||||
.LLLLLL.LLLLLLL..LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
..LL....L..........LL..L....L.LL...L.L...L.L...LLL..LL....LL.L.L.LLLL...L.L.......L.....LL........
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LL.L.
|
||||
LLLLLLL.LLLL.LL.LLL.LLLLL.LLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLL.LL
|
||||
LL.LLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLL.LLL.LLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLL.
|
||||
LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLL.LLL.L.LLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLL.L.LLLLL.LLLL.LLLL.LLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLL.L
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLLL.LLLLLLLLL.LL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLL.LLL.L.LLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLL.L.LLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
..LLL.LL.....LL...LL..L..LLL...........LL...........L.....L.......L..LLLLL......L......LL..L...L.L
|
||||
LLLLLLL.LLLLLLL.L.LLLLLLLLLL.LL.LLLL.LLLLLLLLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLL.LL..LL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLL.LLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL..LLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLL.LL.LLLLL.LLLL.LLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLL.LLLLLLL.L.LLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLL..LLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL..LLLL
|
||||
LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLL..LLLLLLLLLLLLLLLLL.LLLLL
|
||||
.......L...LLL.L....L.LL......L.L...L...LL.LL...L...L..L.L.LL.........L.L..L.L.L.......L..L.....L.
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLL..LLLLLLLLLLLLL..LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLL.LL.LLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLL.LLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLL..LL.LLLLL.LLLLLLLL.L.LLL.LLLL.LLLLLLLLLLLLLLLL..LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
.LLLL.L.LLLLLLL.LLLLLLLLL.LLLLLLLLLL..LLL.LLL.LLLL.LLLLLLLLL.LLLL.LL.LLLLL.LLLLLLLLL.LLLLLLL..L.LL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL..LL.LLLLLLLLLL.LL.LLLLLL.LLLLL.L.LLLLL.LLLLLL..LLLLLLLLL.LLLLL
|
||||
..L...L..L..L.L..LL.L.LLL.LLL.L....L..LL.....L....LL...L.L.L.L...L.L.....LLL......L...LL.L.......L
|
||||
LLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLL.LLLLLLL.LLLLL..LLLLLLLLLLL.L.LL.LLLLLLLLLLLL.LL.LLL.LLL.LLLLL
|
||||
LLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLL..LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.L.LLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LL.LLLLL
|
||||
..L..LL.L.L...LL...L.LL.LL....L.L.L.LLL...LL.LL...L...L...LLLLLL.LLL...L.L.LL................LL.L.
|
||||
LLLLLLLLLLL.LLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLLLLLL.LLLLLLLLLL.LLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLL.L.LLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLL.LLLLLLL.LLLLLLLLL.L.LLL.LL.LLLLLLLL.L.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
.LL.LLL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL
|
||||
LLLL.LL.LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LL.LLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLLLLLL.LLLLLLLLL.LLLLL
|
||||
LLLLLLL.LLLLLLL..LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LL.LLLL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLL
|
115
day11/rules.py
115
day11/rules.py
@ -1,115 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from itertools import count, takewhile
|
||||
|
||||
directions = (
|
||||
(-1, -1),
|
||||
(-1, 0),
|
||||
(-1, 1),
|
||||
(0, -1),
|
||||
(0, 1),
|
||||
(1, -1),
|
||||
(1, 0),
|
||||
(1, 1),
|
||||
)
|
||||
|
||||
grid_width = 98
|
||||
grid_height = 97
|
||||
|
||||
|
||||
def handle_empty(index, grid, next_grid):
|
||||
"""
|
||||
If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.
|
||||
"""
|
||||
neighbors = count_neighbors(index, grid)
|
||||
if neighbors == 0:
|
||||
next_grid[index] = "#"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def handle_occupied(index, grid, next_grid):
|
||||
"""
|
||||
If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.
|
||||
"""
|
||||
neighbors = count_neighbors(index, grid)
|
||||
if neighbors >= 4:
|
||||
next_grid[index] = "L"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def count_neighbors(pos, grid):
|
||||
neighbors = 0
|
||||
x = pos % grid_width
|
||||
y = pos // grid_width
|
||||
for (dx, dy) in directions:
|
||||
xx = x + dx
|
||||
yy = y + dy
|
||||
if not in_bounds((xx, yy)):
|
||||
continue
|
||||
|
||||
if grid[yy * grid_width + xx] == "#":
|
||||
neighbors += 1
|
||||
return neighbors
|
||||
|
||||
|
||||
def handle_empty_2(index, grid, next_grid):
|
||||
"""
|
||||
If a seat is empty and there are no occupied seat visible in neither direction,
|
||||
the seat becomes occupied
|
||||
"""
|
||||
neighbors = 0
|
||||
x = index % grid_width
|
||||
y = index // grid_width
|
||||
for direction in directions:
|
||||
# keep moving in the specified direction, while checking
|
||||
# that we are in bounds of the grid
|
||||
for xx, yy in takewhile(in_bounds, move(x, y, direction)):
|
||||
cell = grid[yy * grid_width + xx]
|
||||
if cell == "#":
|
||||
neighbors += 1
|
||||
elif cell == "L":
|
||||
break # No occupied seat in that direction, we can break
|
||||
|
||||
if neighbors == 0:
|
||||
next_grid[index] = "#"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def handle_occupied_2(index, grid, next_grid):
|
||||
"""
|
||||
An occupied seat becomes empty if there are five or more visible occupied
|
||||
seats in either direction.
|
||||
"""
|
||||
occupied = 0
|
||||
x = index % grid_width
|
||||
y = index // grid_width
|
||||
for direction in directions:
|
||||
for xx, yy in takewhile(in_bounds, move(x, y, direction)):
|
||||
print(xx, yy)
|
||||
cell = grid[yy * grid_width + xx]
|
||||
|
||||
if cell == "#":
|
||||
occupied += 1
|
||||
|
||||
if occupied >= 5:
|
||||
next_grid[index] = "L"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def in_bounds(pos):
|
||||
x, y = pos
|
||||
return 0 <= x < grid_width and 0 <= y < grid_height
|
||||
|
||||
|
||||
def move(x, y, direction):
|
||||
pos = x, y
|
||||
while True:
|
||||
yield pos
|
||||
pos = x + direction[0], y + direction[1]
|
||||
|
||||
|
||||
part1_rules = {"L": handle_empty, "#": handle_occupied}
|
||||
part2_rules = {"L": handle_empty_2, "#": handle_occupied_2}
|
@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
def part1(infile):
|
||||
memory = defaultdict(int)
|
||||
for line in infile:
|
||||
left, right = line.split("=")
|
||||
if left.startswith("mask"):
|
||||
one_mask = right.translate(right.maketrans("X", "0"))
|
||||
zero_mask = right.translate(right.maketrans("X10", "001"))
|
||||
else:
|
||||
address = int(left.split("[")[1].rstrip("] ")) # mem[42] -> 42
|
||||
value = int(right.rstrip())
|
||||
memory[address] = value & ~int(zero_mask, 2) | int(one_mask, 2)
|
||||
|
||||
return sum(memory.values())
|
||||
|
||||
|
||||
def part2(infile):
|
||||
memory = defaultdict(int)
|
||||
for line in infile:
|
||||
left, right = line.split(" = ")
|
||||
if left.startswith("mask"):
|
||||
mask = right.rstrip()
|
||||
else:
|
||||
value = right.rstrip()
|
||||
address = apply_mask(left.split("[")[1].rstrip("] "), mask)
|
||||
for addr in generate_floating_addresses(address):
|
||||
memory[int(addr, 2)] = int(value)
|
||||
return sum(memory.values())
|
||||
|
||||
|
||||
def apply_mask(address, mask):
|
||||
address = bin(int(address)).lstrip("0b")
|
||||
address = address.zfill(36)
|
||||
for index, bit in enumerate(mask):
|
||||
if bit == "1":
|
||||
address = address[:index] + "1" + address[index + 1 :]
|
||||
elif bit == "X":
|
||||
address = address[:index] + "X" + address[index + 1 :]
|
||||
return address
|
||||
|
||||
|
||||
def generate_floating_addresses(address):
|
||||
index = address.find("X")
|
||||
if index == -1:
|
||||
return [address]
|
||||
a1 = generate_floating_addresses(address[:index] + "0" + address[index + 1 :])
|
||||
a2 = generate_floating_addresses(address[:index] + "1" + address[index + 1 :])
|
||||
return a1 + a2
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("input.txt") as infile:
|
||||
print(part1(infile))
|
||||
infile.seek(0)
|
||||
print(part2(infile))
|
564
day14/input.txt
564
day14/input.txt
@ -1,564 +0,0 @@
|
||||
mask = 1000XX0X0X0X0011XX11110110X101101X01
|
||||
mem[17353] = 91550
|
||||
mem[3346] = 113780395
|
||||
mem[25928] = 15887
|
||||
mask = 1100X110000111X1X010X101X01110110X01
|
||||
mem[22673] = 365674634
|
||||
mem[56387] = 707
|
||||
mem[59272] = 66101
|
||||
mask = 00110000X1011011111X1X100X1001111000
|
||||
mem[26721] = 1906961
|
||||
mem[6434] = 1547
|
||||
mem[38772] = 3670902
|
||||
mask = 1X0110X001101011X011000011000010X100
|
||||
mem[14129] = 9885418
|
||||
mem[16579] = 19578559
|
||||
mem[17948] = 222711
|
||||
mem[39312] = 3696
|
||||
mem[28037] = 4392
|
||||
mask = 1XX01010010100101010X10X0X100X110X0X
|
||||
mem[27174] = 34330
|
||||
mem[38975] = 1673
|
||||
mem[53860] = 43706522
|
||||
mem[24314] = 129
|
||||
mem[46690] = 2122756
|
||||
mem[51409] = 300
|
||||
mask = X0X00100X110101XX1110000001000X01101
|
||||
mem[16769] = 6839
|
||||
mem[4773] = 197670
|
||||
mem[16306] = 9387
|
||||
mem[23109] = 18936748
|
||||
mask = X001X00001111X11X11XX1000001001X1111
|
||||
mem[9277] = 2126
|
||||
mem[19599] = 2620
|
||||
mem[35796] = 1119795
|
||||
mem[43013] = 7907629
|
||||
mem[34780] = 73089
|
||||
mem[43625] = 1251
|
||||
mem[45268] = 35981183
|
||||
mask = 11X0XX100X01001010101000X000X00X0001
|
||||
mem[28057] = 87060
|
||||
mem[57943] = 156869
|
||||
mem[34328] = 441008
|
||||
mem[19172] = 974642
|
||||
mem[13455] = 140868162
|
||||
mem[10479] = 1478
|
||||
mem[3348] = 610
|
||||
mask = 1X0011X0000X00X111111X0011001100XX00
|
||||
mem[20706] = 371595403
|
||||
mem[32191] = 61238
|
||||
mem[32541] = 121
|
||||
mask = 000101X1X110X01X1010X1XX011XX0110110
|
||||
mem[2502] = 3004
|
||||
mem[42813] = 50475
|
||||
mem[6736] = 218863
|
||||
mem[57229] = 542
|
||||
mask = X00011110X101011X01100X11011010X100X
|
||||
mem[29838] = 6609
|
||||
mem[63501] = 76
|
||||
mem[35757] = 447
|
||||
mem[19646] = 1841
|
||||
mem[50155] = 10989663
|
||||
mask = 10011000X01110XX1111X10XX00000101001
|
||||
mem[16439] = 1250783
|
||||
mem[50267] = 12877
|
||||
mask = 000X0X011110101X101X010X1X1100X0X1X1
|
||||
mem[55873] = 29485206
|
||||
mem[3857] = 932873
|
||||
mem[53144] = 49937201
|
||||
mem[45634] = 3973
|
||||
mem[62141] = 84958
|
||||
mask = 10001X110XX01011X1100X011010110110XX
|
||||
mem[27094] = 64589302
|
||||
mem[20130] = 1670
|
||||
mem[42036] = 39179827
|
||||
mem[31787] = 25295623
|
||||
mem[39027] = 1380
|
||||
mem[53488] = 593805
|
||||
mem[27469] = 6270971
|
||||
mask = 0101000001111011101110XXX010X0100010
|
||||
mem[34667] = 1338
|
||||
mem[2529] = 49045
|
||||
mem[40550] = 149
|
||||
mem[56292] = 14155
|
||||
mask = 1100111X0X0110X11111111010X001001111
|
||||
mem[6465] = 8116
|
||||
mem[45171] = 158525709
|
||||
mem[10613] = 1661122
|
||||
mem[37037] = 19153
|
||||
mask = 1X0000X1111X1010X1110101100001X10101
|
||||
mem[3530] = 361
|
||||
mem[15560] = 140278839
|
||||
mem[62028] = 12515878
|
||||
mem[20628] = 11032
|
||||
mem[48912] = 111176
|
||||
mem[47515] = 605
|
||||
mask = X00111001XX11011X1111X000100X0X0X010
|
||||
mem[4615] = 738
|
||||
mem[672] = 1477
|
||||
mem[16686] = 24069368
|
||||
mask = 110011100XX10000X0X00XX0X11100X10111
|
||||
mem[12619] = 1252770
|
||||
mem[954] = 590503
|
||||
mem[16403] = 1087106
|
||||
mem[11529] = 24258
|
||||
mem[11701] = 160993242
|
||||
mem[42676] = 64764346
|
||||
mem[7626] = 316
|
||||
mask = X001100XXX111X111X1111X000X0X0011100
|
||||
mem[42659] = 2822
|
||||
mem[40278] = 2173727
|
||||
mem[32236] = 13461
|
||||
mem[8739] = 49532769
|
||||
mem[23981] = 6272019
|
||||
mem[26083] = 7424
|
||||
mask = 1X001110010X101110111001100X0101XX01
|
||||
mem[5207] = 285084
|
||||
mem[46863] = 202944
|
||||
mem[29623] = 74688785
|
||||
mem[39251] = 2480123
|
||||
mem[21934] = 128729
|
||||
mem[17298] = 74932253
|
||||
mem[3243] = 2421447
|
||||
mask = 100001000X11100X1X110010XX1010XX010X
|
||||
mem[45668] = 70363
|
||||
mem[5250] = 19909279
|
||||
mem[20889] = 8027
|
||||
mem[61368] = 422881
|
||||
mask = 1010110X0X111X1111110000X01100XX010X
|
||||
mem[7264] = 4257
|
||||
mem[62228] = 4486
|
||||
mem[11135] = 31885819
|
||||
mem[50978] = 523114
|
||||
mem[12827] = 9872
|
||||
mask = 10X011010110X011001X11001X1100X11101
|
||||
mem[15425] = 38832030
|
||||
mem[7190] = 3685311
|
||||
mem[4442] = 111088
|
||||
mem[46774] = 679
|
||||
mem[48679] = 30399
|
||||
mask = 101100X111011111X1111100X1X100001001
|
||||
mem[21055] = 143042
|
||||
mem[44782] = 112377326
|
||||
mem[62184] = 8230
|
||||
mem[49662] = 512539
|
||||
mem[26324] = 73321
|
||||
mem[17454] = 107773
|
||||
mem[63437] = 73219244
|
||||
mask = 10000111011110111X1000XX1010X1X0X111
|
||||
mem[36342] = 1818
|
||||
mem[18094] = 47648232
|
||||
mem[52003] = 776369
|
||||
mask = 11001X100XX0X01111111XX0110111X00110
|
||||
mem[29103] = 5339928
|
||||
mem[36458] = 988421275
|
||||
mem[749] = 185734229
|
||||
mem[33969] = 29427002
|
||||
mask = 10X1X0X111X11XX11X11110011XX00011100
|
||||
mem[18473] = 197816
|
||||
mem[140] = 1537228
|
||||
mem[5706] = 1016744730
|
||||
mem[21968] = 425238881
|
||||
mem[2299] = 7217883
|
||||
mem[36197] = 66
|
||||
mask = 100110X10X11X011111111X100110X110X00
|
||||
mem[5148] = 3669
|
||||
mem[50092] = 313576115
|
||||
mem[1719] = 23750788
|
||||
mem[62734] = 2882
|
||||
mem[49010] = 14217157
|
||||
mask = 1X0XXX00011X10111X1110000011101X0X1X
|
||||
mem[24047] = 11171624
|
||||
mem[34404] = 251169353
|
||||
mem[23056] = 3568348
|
||||
mem[2599] = 9449217
|
||||
mask = 0X0X11X1011010111X101X00X111X0001100
|
||||
mem[49530] = 1917
|
||||
mem[23017] = 4137
|
||||
mem[42892] = 209824
|
||||
mem[44196] = 2282
|
||||
mem[340] = 416390430
|
||||
mem[40836] = 4717162
|
||||
mask = 1101X000XX1010111011XX1X0000100X0000
|
||||
mem[20534] = 116
|
||||
mem[51190] = 846413
|
||||
mem[43522] = 88862477
|
||||
mem[56757] = 7097
|
||||
mask = 00000101111XX01110X0X00000111000110X
|
||||
mem[20975] = 25703
|
||||
mem[11316] = 7721
|
||||
mem[56239] = 29785
|
||||
mem[51862] = 145224773
|
||||
mem[3358] = 10907
|
||||
mem[13070] = 77929
|
||||
mask = 0X0011110110X0111X1XX11001100X0X11XX
|
||||
mem[22991] = 231
|
||||
mem[33217] = 2826
|
||||
mem[34404] = 509
|
||||
mask = 100X11X00000X0X11111000XX000X01010X0
|
||||
mem[18012] = 4386
|
||||
mem[56514] = 16103818
|
||||
mem[46863] = 7016934
|
||||
mem[53389] = 2025015
|
||||
mem[5646] = 77832170
|
||||
mask = 110011X00001X0X11111X100X0000100X01X
|
||||
mem[38058] = 327471
|
||||
mem[7489] = 247743521
|
||||
mem[41341] = 980157
|
||||
mask = 10X01XX000X1001X1111X000X101000111X1
|
||||
mem[2278] = 1003775
|
||||
mem[4957] = 695497071
|
||||
mem[27026] = 83380
|
||||
mem[58747] = 3055795
|
||||
mem[35663] = 424302
|
||||
mem[55675] = 1400
|
||||
mem[59995] = 15450
|
||||
mask = 0X011001001X1X1X10110100011011001011
|
||||
mem[18012] = 105413272
|
||||
mem[18353] = 2478
|
||||
mem[10658] = 33943560
|
||||
mem[64129] = 97108
|
||||
mem[16290] = 585316720
|
||||
mem[38816] = 26080808
|
||||
mask = 100X1X10XXX0101X101X000X00111011011X
|
||||
mem[37923] = 340333740
|
||||
mem[34920] = 429908705
|
||||
mem[955] = 1727757
|
||||
mem[65269] = 221055157
|
||||
mem[10891] = 523742
|
||||
mem[7264] = 21158973
|
||||
mask = 10XX1100011X10111X1100X00000X0111111
|
||||
mem[61904] = 63495
|
||||
mem[57943] = 33076
|
||||
mem[20097] = 836033572
|
||||
mem[12549] = 55029
|
||||
mem[3024] = 3602462
|
||||
mask = 110X0000011010X11011X0X0101X10XX000X
|
||||
mem[14134] = 1542
|
||||
mem[802] = 10323
|
||||
mem[51543] = 171365721
|
||||
mem[12827] = 3980
|
||||
mask = 1000X100011110X1111100X100XXX0X001X1
|
||||
mem[8136] = 449831
|
||||
mem[1281] = 999072275
|
||||
mem[20796] = 332579
|
||||
mem[443] = 131455
|
||||
mem[12894] = 18123
|
||||
mem[50922] = 5177801
|
||||
mask = 100XXX0001101011X1110X000001101011XX
|
||||
mem[18244] = 930
|
||||
mem[672] = 89370
|
||||
mem[42478] = 50196
|
||||
mem[35527] = 16
|
||||
mem[61716] = 105683782
|
||||
mask = 1000XX00011010111X110X0X1011101XX110
|
||||
mem[6775] = 3861120
|
||||
mem[843] = 312
|
||||
mem[2688] = 196099
|
||||
mem[37141] = 377569
|
||||
mem[33497] = 825
|
||||
mem[32589] = 1629649
|
||||
mask = 10X100011X1X1011X01110XX11X01100X100
|
||||
mem[20624] = 315487
|
||||
mem[31408] = 72488
|
||||
mem[63467] = 13483
|
||||
mem[2471] = 177211433
|
||||
mem[45598] = 62138
|
||||
mem[25301] = 6365509
|
||||
mask = 110011X0000111001X110110X00XX00001X0
|
||||
mem[42036] = 7869
|
||||
mem[55966] = 14443044
|
||||
mem[27440] = 100934729
|
||||
mem[19003] = 2085
|
||||
mem[15653] = 2142716
|
||||
mem[23117] = 1021
|
||||
mem[45011] = 5295150
|
||||
mask = X100101X0000X01111111001110X010X111X
|
||||
mem[57308] = 11803
|
||||
mem[2240] = 961172
|
||||
mask = 100011X0011010111X1XX100101010XXX1X0
|
||||
mem[2444] = 243334769
|
||||
mem[12549] = 40175975
|
||||
mask = X0011001X011111110110XX00X0X00X11011
|
||||
mem[24834] = 363054
|
||||
mem[32941] = 83666205
|
||||
mem[16403] = 444996
|
||||
mask = 1100X1100001XXXX101X01001X101000010X
|
||||
mem[56757] = 6879
|
||||
mem[4442] = 2107238
|
||||
mem[25399] = 14684
|
||||
mem[38582] = 330023
|
||||
mem[59557] = 299
|
||||
mem[34404] = 357591660
|
||||
mask = 0100X11101100011111XX1X000100011111X
|
||||
mem[19990] = 405059382
|
||||
mem[50770] = 21723749
|
||||
mem[47204] = 310
|
||||
mem[55142] = 353841
|
||||
mem[31516] = 46662
|
||||
mem[59748] = 154981
|
||||
mask = 100X111001X010111X110X1X101110X01111
|
||||
mem[25989] = 412990662
|
||||
mem[44019] = 11063
|
||||
mem[5207] = 25633
|
||||
mem[23445] = 2402831
|
||||
mem[30252] = 60933
|
||||
mask = 100X111001001X10X0100XXX0011011X10X0
|
||||
mem[45485] = 5697187
|
||||
mem[39779] = 21767171
|
||||
mem[34966] = 498
|
||||
mem[13640] = 123685
|
||||
mask = X001X00X0XX11X1111111001X111X11111X0
|
||||
mem[30646] = 77071
|
||||
mem[40278] = 15164
|
||||
mem[48949] = 2547
|
||||
mem[49010] = 168697055
|
||||
mem[52212] = 836232
|
||||
mask = X00011000111101111X100X100100X00XX1X
|
||||
mem[13958] = 872
|
||||
mem[28057] = 130528
|
||||
mem[9891] = 1464
|
||||
mask = 00X10000000X11111111X0100X1X0X111111
|
||||
mem[29510] = 29331
|
||||
mem[16403] = 265384902
|
||||
mem[46270] = 55500
|
||||
mem[35558] = 149875
|
||||
mem[42316] = 8508705
|
||||
mem[12894] = 281336
|
||||
mask = 10X011XX01X00011001110X11111X00X1XX0
|
||||
mem[15463] = 114059
|
||||
mem[64253] = 5760
|
||||
mem[34294] = 38569
|
||||
mem[1677] = 5097
|
||||
mem[22991] = 502
|
||||
mem[44522] = 326097
|
||||
mem[8172] = 37
|
||||
mask = 00010000X0001X1111111011011101X1X110
|
||||
mem[39779] = 1142
|
||||
mem[29838] = 85552455
|
||||
mem[42813] = 5712091
|
||||
mem[45115] = 58778
|
||||
mem[13319] = 855
|
||||
mem[2440] = 410159
|
||||
mask = X101101101X01111101010X110X110000010
|
||||
mem[41886] = 1753
|
||||
mem[57501] = 961519277
|
||||
mem[48943] = 1352369
|
||||
mask = 1000011X01111X1111101XX0000X101XX110
|
||||
mem[840] = 954719
|
||||
mem[53875] = 11370
|
||||
mem[45011] = 5033013
|
||||
mem[45230] = 850083
|
||||
mem[20455] = 862
|
||||
mask = 1X00010XX111101X111110000X111011X1X0
|
||||
mem[34148] = 99301330
|
||||
mem[26648] = 7719906
|
||||
mem[18244] = 110630512
|
||||
mask = 1100X11000X11X0X1111100X0X00X010XX11
|
||||
mem[50401] = 1733252
|
||||
mem[26875] = 37568501
|
||||
mem[35663] = 508001
|
||||
mem[14749] = 1838
|
||||
mask = X1010XX001111011101X0000X001XX100010
|
||||
mem[63359] = 5414799
|
||||
mem[35329] = 251023948
|
||||
mem[26907] = 876247525
|
||||
mask = X000X0X1111XX0100111XX10101X011X1100
|
||||
mem[23165] = 20505666
|
||||
mem[7340] = 1068126
|
||||
mem[5630] = 2429
|
||||
mem[55672] = 30150
|
||||
mask = 1000X11X011X101111101X0XX0101X1010X0
|
||||
mem[19212] = 6837122
|
||||
mem[14758] = 38425
|
||||
mem[19003] = 119768
|
||||
mask = 10000X01111110X0X1111110XXX110011X10
|
||||
mem[33194] = 61265858
|
||||
mem[13147] = 3274970
|
||||
mem[41650] = 4162
|
||||
mem[42478] = 1225726
|
||||
mem[63031] = 112464577
|
||||
mask = X0X10000X101101111110011X11101111100
|
||||
mem[35647] = 5788908
|
||||
mem[42040] = 48997
|
||||
mem[62673] = 1901
|
||||
mem[39850] = 1010636
|
||||
mask = 11X010X0010100101X1XXX0001001111010X
|
||||
mem[20116] = 50
|
||||
mem[57943] = 17495168
|
||||
mem[28763] = 19897421
|
||||
mem[21657] = 923815
|
||||
mem[4802] = 86976237
|
||||
mask = 1X0011X001100011XX1X100X101110100110
|
||||
mem[13898] = 4734170
|
||||
mem[1595] = 82201
|
||||
mask = 1001X0010011X111111X1X0X1X1100011000
|
||||
mem[44782] = 14922
|
||||
mem[54309] = 1336
|
||||
mem[23027] = 194803
|
||||
mem[24035] = 29316023
|
||||
mask = 1100111000010101X011X00011100X00010X
|
||||
mem[50916] = 1751
|
||||
mem[47305] = 2707
|
||||
mem[14464] = 13519228
|
||||
mem[33044] = 10744
|
||||
mem[53730] = 4920479
|
||||
mem[37037] = 859
|
||||
mask = X100111X0X10001111111100X11110001110
|
||||
mem[58049] = 939221
|
||||
mem[1924] = 17
|
||||
mem[61135] = 358315072
|
||||
mem[21809] = 5281
|
||||
mem[39141] = 1817
|
||||
mem[51543] = 136115569
|
||||
mem[50155] = 300797
|
||||
mask = 110010X000X1110010X100X0111X001X00XX
|
||||
mem[50279] = 14014916
|
||||
mem[12124] = 68328623
|
||||
mem[44199] = 313076
|
||||
mem[64321] = 4725
|
||||
mem[20842] = 108600115
|
||||
mem[37411] = 4492927
|
||||
mask = X1001X11000010111111XX0X100X11000011
|
||||
mem[28505] = 8712
|
||||
mem[37967] = 35824634
|
||||
mem[23027] = 241
|
||||
mem[17252] = 20614619
|
||||
mem[24389] = 10076
|
||||
mask = X101000001X01011X011X0X10X1100101X10
|
||||
mem[61716] = 8801
|
||||
mem[34944] = 1881
|
||||
mem[4710] = 8504
|
||||
mem[56313] = 14501
|
||||
mem[5654] = 14055781
|
||||
mem[22490] = 90967
|
||||
mask = X0X1110X01101011111101001100001X1101
|
||||
mem[21158] = 463323
|
||||
mem[18946] = 15357
|
||||
mem[57000] = 2534149
|
||||
mem[15029] = 194259123
|
||||
mem[38305] = 441356
|
||||
mask = 11001110010X000X101000XX010000111111
|
||||
mem[53389] = 1383160
|
||||
mem[938] = 1952336
|
||||
mem[64009] = 15833
|
||||
mask = 00X11X0011X11011111111000X10001X11X1
|
||||
mem[6272] = 13767595
|
||||
mem[54734] = 510
|
||||
mem[33438] = 1925
|
||||
mem[36878] = 260095
|
||||
mask = 110X11100111X0001X000001011001X01011
|
||||
mem[47847] = 2621
|
||||
mem[49530] = 526
|
||||
mem[17284] = 1326861
|
||||
mem[17082] = 5186894
|
||||
mem[18302] = 13617528
|
||||
mem[7269] = 1111687
|
||||
mask = 110011100001X11X101X1X101010X01X0100
|
||||
mem[60461] = 2942
|
||||
mem[35460] = 327
|
||||
mem[28055] = 375226
|
||||
mask = 0011111X01101111111010XXX101X101100X
|
||||
mem[41886] = 113214
|
||||
mem[17284] = 85512736
|
||||
mask = 0X01X111X1101X1110100101011110011XX1
|
||||
mem[40617] = 603263
|
||||
mem[10573] = 33216107
|
||||
mem[22356] = 26505
|
||||
mem[6272] = 45384662
|
||||
mask = 10101X0001111011X11X000111X1X1100X0X
|
||||
mem[7936] = 47932
|
||||
mem[16185] = 5024
|
||||
mem[52003] = 1045816
|
||||
mask = 0XXX1X1101101X111X1001X000110001110X
|
||||
mem[32145] = 91132
|
||||
mem[55966] = 3856425
|
||||
mem[42185] = 24094
|
||||
mem[36708] = 277
|
||||
mask = 1101100XX11X1011111110X0100X10X0000X
|
||||
mem[31516] = 5220059
|
||||
mem[35747] = 2317
|
||||
mem[7864] = 3365
|
||||
mem[55570] = 45702
|
||||
mask = 110110010X1110X1X111000X0000101X1X00
|
||||
mem[44696] = 47285061
|
||||
mem[28866] = 23561
|
||||
mem[56107] = 8116244
|
||||
mem[41437] = 2106148
|
||||
mask = 110011X00011001111XX100X11001010010X
|
||||
mem[45954] = 58871
|
||||
mem[61135] = 3411
|
||||
mem[17541] = 3200218
|
||||
mem[38985] = 233678515
|
||||
mem[41259] = 166543015
|
||||
mem[2350] = 34876506
|
||||
mask = 11X01X00X0X00001111XX00101X0X0100010
|
||||
mem[23027] = 474324
|
||||
mem[6434] = 53973
|
||||
mem[40128] = 16133
|
||||
mem[36404] = 5183
|
||||
mask = 1100111000XX00111X11110X11X00X10000X
|
||||
mem[10063] = 9539320
|
||||
mem[843] = 671
|
||||
mem[4773] = 140929
|
||||
mem[19139] = 133212046
|
||||
mem[20975] = 795877
|
||||
mask = 100X0X00011X101111X101000010X0001000
|
||||
mem[932] = 2504742
|
||||
mem[25530] = 1425628
|
||||
mask = 10X001X00X1X1X011X1100110X1X1011X000
|
||||
mem[8358] = 313827173
|
||||
mem[7256] = 1152512
|
||||
mem[6697] = 60311
|
||||
mem[15728] = 6743
|
||||
mem[64009] = 43785
|
||||
mem[43325] = 2846
|
||||
mask = 100X1X00011X1011111X000000X0X01X1X00
|
||||
mem[46292] = 1644
|
||||
mem[1988] = 1949
|
||||
mem[40476] = 111556
|
||||
mask = 100011X0X11XX01110111X001001X010111X
|
||||
mem[43625] = 120590
|
||||
mem[63878] = 417
|
||||
mem[1924] = 4511945
|
||||
mem[36404] = 2609999
|
||||
mem[8758] = 30953
|
||||
mem[896] = 56891660
|
||||
mem[37141] = 770
|
||||
mask = 100011X001X0X0111X11100000XXX0010X10
|
||||
mem[19084] = 9020
|
||||
mem[39875] = 31650099
|
||||
mask = 10101110011000110011XX11X110011X1010
|
||||
mem[13319] = 1038
|
||||
mem[46337] = 51363384
|
||||
mem[61871] = 3928
|
||||
mem[15595] = 224135
|
||||
mem[56790] = 39964747
|
||||
mem[54731] = 1878594
|
||||
mem[53872] = 4678318
|
||||
mask = 00X11001001110111011X0X001X111110X11
|
||||
mem[39549] = 14142886
|
||||
mem[26096] = 7903442
|
||||
mem[43322] = 8676
|
||||
mem[17353] = 509961
|
||||
mem[49320] = 11303
|
||||
mask = 1X0100000X00X011X01X011000X0X0111000
|
||||
mem[48878] = 209296
|
||||
mem[29990] = 394600
|
||||
mask = 100000000X10101X11110XX0101011000011
|
||||
mem[843] = 542527866
|
||||
mem[63601] = 10350671
|
||||
mem[9659] = 3514
|
||||
mem[33969] = 266
|
||||
mem[2863] = 15309
|
||||
mask = 10X0X000011X10XX01100101100XX01X0010
|
||||
mem[56350] = 2980026
|
||||
mem[45422] = 7205
|
||||
mem[26310] = 10221
|
||||
mem[40386] = 358165
|
||||
mem[55012] = 32294336
|
||||
mask = X1001X10000111001011X1001011X0010110
|
||||
mem[25508] = 86175837
|
||||
mem[26087] = 58400593
|
||||
mem[48996] = 27712
|
||||
mem[3272] = 2146
|
@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from collections import defaultdict
|
||||
from array import array
|
||||
|
||||
|
||||
def main(initial_suite, max_iteration):
|
||||
iteration = 1
|
||||
seen = defaultdict(int)
|
||||
|
||||
# init
|
||||
for number in initial_suite:
|
||||
seen[number] = iteration
|
||||
iteration += 1
|
||||
|
||||
current = 0
|
||||
while iteration < max_iteration:
|
||||
last_seen = seen[current]
|
||||
if last_seen == 0:
|
||||
seen[current] = iteration
|
||||
current = 0 # next
|
||||
else:
|
||||
seen[current] = iteration
|
||||
current = iteration - last_seen # next
|
||||
iteration += 1
|
||||
return current
|
||||
|
||||
|
||||
def main_array(initial_suite, max_iteration):
|
||||
iteration = 1
|
||||
seen = array('I', [0] * max_iteration)
|
||||
|
||||
# init
|
||||
for number in initial_suite:
|
||||
seen[number] = iteration
|
||||
iteration += 1
|
||||
|
||||
current = 0
|
||||
while iteration < max_iteration:
|
||||
last_seen = seen[current]
|
||||
if last_seen == 0:
|
||||
seen[current] = iteration
|
||||
current = 0 # next
|
||||
else:
|
||||
seen[current] = iteration
|
||||
current = iteration - last_seen # next
|
||||
iteration += 1
|
||||
return current
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
inp = [6, 3, 15, 13, 1, 0]
|
||||
# 423 µs ± 53.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
|
||||
print(main(inp, 2020))
|
||||
# 13.6 s ± 2.89 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
|
||||
#print(main(inp, 30000000))
|
||||
print(main_array(inp, 30000000))
|
@ -1,16 +0,0 @@
|
||||
Stack trace:
|
||||
Frame Function Args
|
||||
00600000010 001800617BE (00180251890, 0018023DFD1, 00000000058, 000FFFFB770)
|
||||
00600000010 001800490FA (00000000000, 00100000000, 00000000000, 00000000001)
|
||||
00600000010 00180049132 (00000000000, 00000000000, 00000000058, 0018031F2C0)
|
||||
00600000010 0018006D9C9 (0000000000A, 000FFFFC940, 001800458BF, 00000000000)
|
||||
00600000010 0018006DB92 (00000000003, 000FFFFC940, 001800458BF, 000FFFFC940)
|
||||
00600000010 0018006EA4C (000FFFFC940, 001802405E5, 001800EAF57, 0000000000D)
|
||||
00600000010 001800596A6 (000FFFF0000, 00000000000, 00000000000, 773CE092FFFFFFFF)
|
||||
00600000010 0018005A9C5 (00000000002, 0018031EBD0, 001800BE5F9, 00600040000)
|
||||
00600000010 0018005AE89 (001800C7664, 00000000000, 00000000000, 00000000000)
|
||||
000FFFFCCE0 0018005B149 (000FFFFCE00, 00000000000, 00000000030, 0000000002F)
|
||||
000FFFFCCE0 00180049877 (00000000000, 00000000000, 00000000000, 00000000000)
|
||||
000FFFFFFF0 001800482C6 (00000000000, 00000000000, 00000000000, 00000000000)
|
||||
000FFFFFFF0 00180048374 (00000000000, 00000000000, 00000000000, 00000000000)
|
||||
End of stack trace
|
105
day16/day16.py
105
day16/day16.py
@ -1,105 +0,0 @@
|
||||
# /usr/bin/env python3
|
||||
import re
|
||||
from collections import defaultdict
|
||||
|
||||
"""
|
||||
identify invalid nearby tickets by considering only whether tickets contain values that are not valid for any field.
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
rules, my_ticket, other_tickets = open("input.txt").read().split("\n\n")
|
||||
rules = parse_fields(rules)
|
||||
my_ticket = my_ticket.splitlines()[1]
|
||||
other_tickets = other_tickets.splitlines()[1:]
|
||||
print("Ticket scanning error rate ", part1(other_tickets, rules))
|
||||
part2(my_ticket, other_tickets, rules)
|
||||
|
||||
|
||||
def parse_fields(fields):
|
||||
fields_dict = {}
|
||||
for field in fields.splitlines():
|
||||
k, v = field.split(": ")
|
||||
ranges = re.findall(r"(\d+)-(\d+)", v)
|
||||
fields_dict[k] = [range(int(r[0]), int(r[1]) + 1) for r in ranges]
|
||||
return fields_dict
|
||||
|
||||
|
||||
def part1(tickets, rules):
|
||||
scanning_error_rate = 0
|
||||
for ticket in tickets:
|
||||
scanning_error_rate += sum(validate_ticket(ticket, rules))
|
||||
return scanning_error_rate
|
||||
|
||||
|
||||
def validate_ticket(ticket, rules):
|
||||
invalid_fields = []
|
||||
for value in ticket.split(","):
|
||||
value = int(value)
|
||||
if not validate_field(value, *rules.values()):
|
||||
invalid_fields.append(value)
|
||||
return invalid_fields
|
||||
|
||||
|
||||
def validate_field(field, *rules):
|
||||
validations = (any(field in r for r in rule) for rule in rules)
|
||||
return any(validations)
|
||||
|
||||
|
||||
def part2(my_ticket, other_tickets, rules):
|
||||
# filter only valid tickets
|
||||
valid_tickets = [ticket for ticket in other_tickets if validate_ticket(ticket, rules) == []]
|
||||
valid_tickets.append(my_ticket) # my ticket is valid
|
||||
|
||||
# possible field for each index of a ticket
|
||||
candidates = defaultdict(set)
|
||||
for index in range(len(rules)):
|
||||
def inner():
|
||||
for rule_name, constraints in rules.items():
|
||||
for ticket in valid_tickets:
|
||||
field_value = int(ticket.split(",")[index])
|
||||
if not validate_field(field_value, constraints):
|
||||
return
|
||||
candidates[index].add(rule_name)
|
||||
inner()
|
||||
|
||||
sorted_candidates = sort_candidates(candidates)
|
||||
|
||||
fields_indexes = {}
|
||||
try:
|
||||
while len(fields_indexes) != len(rules):
|
||||
index, found = sorted_candidates.popitem()
|
||||
found = next(iter(found))
|
||||
fields_indexes[index] = found
|
||||
sorted_candidates = remove_item(sorted_candidates, found)
|
||||
except:
|
||||
pass
|
||||
|
||||
fields_indexes = {k: v for k,v in fields_indexes.items() if v.startswith('departure')}
|
||||
|
||||
total = 1
|
||||
my_ticket = my_ticket.split(',')
|
||||
for index in fields_indexes:
|
||||
total *= int(my_ticket[index])
|
||||
a = 1
|
||||
|
||||
|
||||
def sort_candidates(c):
|
||||
return {x: c[x] for x in sorted(c, key=lambda k: len(c[k]), reverse=True)}
|
||||
|
||||
def remove_item(candidates, item):
|
||||
ret = {}
|
||||
for key, value in candidates.items():
|
||||
try:
|
||||
value.remove(item)
|
||||
except ValueError:
|
||||
pass
|
||||
ret[key] = value
|
||||
|
||||
#candidates = {k: set(v - item) for k,v in candidates.items()}
|
||||
return ret
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
260
day16/input.txt
260
day16/input.txt
@ -1,260 +0,0 @@
|
||||
departure location: 32-69 or 86-968
|
||||
departure station: 27-290 or 301-952
|
||||
departure platform: 47-330 or 347-956
|
||||
departure track: 46-804 or 826-956
|
||||
departure date: 25-302 or 320-959
|
||||
departure time: 29-885 or 893-961
|
||||
arrival location: 33-643 or 649-963
|
||||
arrival station: 29-135 or 151-973
|
||||
arrival platform: 50-648 or 674-961
|
||||
arrival track: 45-761 or 767-971
|
||||
class: 46-703 or 725-951
|
||||
duration: 47-244 or 257-957
|
||||
price: 49-195 or 209-956
|
||||
route: 44-368 or 393-968
|
||||
row: 48-778 or 797-954
|
||||
seat: 31-421 or 427-964
|
||||
train: 42-229 or 245-961
|
||||
type: 31-261 or 281-964
|
||||
wagon: 36-428 or 445-967
|
||||
zone: 30-906 or 923-960
|
||||
|
||||
your ticket:
|
||||
157,89,103,59,101,181,109,127,67,173,151,97,107,167,61,131,53,163,179,113
|
||||
|
||||
nearby tickets:
|
||||
463,746,834,524,530,944,558,680,416,986,364,677,850,160,641,99,898,360,860,695
|
||||
131,550,365,282,759,549,212,841,933,177,109,407,859,5,560,119,929,178,725,769
|
||||
216,726,353,875,585,448,513,866,55,266,696,173,367,684,99,624,561,735,880,347
|
||||
775,949,284,404,832,445,4,368,702,492,577,133,930,170,212,642,213,881,616,67
|
||||
948,608,525,771,739,732,556,615,843,447,254,605,573,838,399,104,285,568,59,112
|
||||
491,225,446,229,585,462,159,898,365,811,538,469,223,364,943,931,860,835,607,864
|
||||
414,164,269,604,564,592,608,179,593,397,326,740,774,445,525,215,354,518,446,776
|
||||
880,224,616,325,182,619,635,875,580,78,499,699,225,158,408,119,400,555,514,591
|
||||
404,53,154,419,698,67,126,607,519,576,411,51,636,554,856,900,571,133,136,774
|
||||
758,87,214,54,193,99,400,544,452,63,481,559,488,897,867,463,426,946,284,189
|
||||
489,447,687,643,851,104,172,528,551,694,685,101,772,172,575,100,838,927,992,881
|
||||
287,871,570,537,130,290,492,510,163,477,751,273,802,854,624,228,530,591,640,801
|
||||
406,830,574,569,627,886,547,850,897,773,362,687,398,359,102,179,904,480,121,553
|
||||
110,879,900,570,508,612,944,408,160,505,767,702,645,65,753,588,463,871,403,359
|
||||
454,210,123,894,882,285,112,625,936,135,944,88,153,509,852,124,861,997,620,348
|
||||
185,302,106,452,607,408,111,875,204,861,769,545,499,460,541,895,329,756,329,929
|
||||
510,24,65,939,885,469,175,587,837,516,478,593,321,696,734,525,107,227,459,694
|
||||
449,461,195,330,768,501,308,869,747,837,935,109,125,212,212,410,405,358,323,740
|
||||
324,834,284,411,181,668,548,904,900,105,112,413,687,499,281,323,624,175,214,595
|
||||
222,110,150,626,488,688,185,593,738,409,619,419,351,87,836,172,474,613,539,641
|
||||
102,107,614,445,524,414,550,527,556,132,64,767,586,830,226,638,60,900,197,895
|
||||
173,508,122,768,479,624,554,177,496,726,536,853,607,640,167,845,415,536,248,859
|
||||
507,617,67,881,585,97,132,769,484,245,799,301,101,405,682,936,578,680,87,756
|
||||
491,847,160,221,94,832,889,120,576,120,124,756,847,113,169,155,688,217,400,573
|
||||
744,524,90,867,548,906,895,867,58,682,326,733,354,168,199,753,729,770,447,480
|
||||
282,89,694,575,738,862,879,131,542,539,590,605,697,675,631,301,834,571,765,325
|
||||
553,414,732,155,924,108,123,592,321,558,646,624,688,456,51,729,185,193,420,564
|
||||
259,454,89,579,475,240,290,90,883,740,88,615,856,348,474,101,486,539,98,413
|
||||
620,347,175,930,604,755,662,733,867,157,458,58,367,609,926,545,219,69,545,593
|
||||
58,121,126,826,263,218,219,456,691,536,66,193,701,354,564,866,676,182,804,948
|
||||
159,860,447,828,361,162,523,544,641,629,869,477,894,102,751,799,396,395,650,846
|
||||
200,65,905,393,856,56,874,906,949,412,741,570,56,479,600,541,578,348,734,365
|
||||
694,830,665,745,694,590,590,640,111,611,639,770,566,551,258,531,901,585,736,504
|
||||
626,219,100,934,573,583,847,949,562,847,739,672,559,585,638,527,771,826,947,131
|
||||
471,608,301,588,109,586,209,537,835,136,559,156,829,87,526,610,494,862,580,117
|
||||
319,158,288,158,897,100,453,166,194,327,609,756,58,412,213,133,628,518,942,59
|
||||
452,468,575,778,577,854,604,59,899,943,697,827,715,609,565,464,576,588,542,483
|
||||
676,827,772,460,875,415,587,218,660,577,612,731,697,122,94,502,101,301,195,210
|
||||
635,829,732,558,114,804,626,503,408,13,501,882,454,452,108,938,471,834,502,617
|
||||
283,53,517,497,628,552,884,194,560,938,552,833,531,278,218,896,618,878,837,118
|
||||
76,493,861,123,110,117,680,50,515,776,842,567,549,777,803,459,517,52,563,257
|
||||
887,861,214,872,487,582,641,741,636,186,364,563,552,633,630,350,151,902,172,165
|
||||
161,478,353,777,361,596,501,879,642,420,456,907,634,826,852,840,505,923,895,192
|
||||
905,510,756,415,772,533,153,799,407,571,171,425,117,229,610,631,187,65,850,774
|
||||
223,676,134,129,261,211,175,191,411,224,304,544,777,864,53,61,51,900,529,637
|
||||
272,747,598,799,458,534,747,591,218,545,571,183,157,946,557,622,126,866,396,591
|
||||
108,261,879,156,842,466,285,738,771,595,52,55,463,518,665,750,880,798,778,703
|
||||
90,322,517,743,456,911,579,290,923,126,848,868,599,870,628,590,120,544,353,546
|
||||
861,477,711,754,420,357,257,880,689,559,748,627,508,171,770,469,223,728,884,414
|
||||
60,538,906,571,902,494,284,493,258,745,124,684,94,646,451,90,850,180,175,514
|
||||
475,866,326,566,937,975,846,491,456,158,830,403,349,583,557,57,535,883,641,493
|
||||
498,580,467,116,614,615,629,161,528,454,81,474,843,640,740,96,848,544,99,530
|
||||
526,628,678,725,881,394,742,773,837,762,414,363,211,550,52,106,60,619,61,539
|
||||
152,618,802,64,205,828,480,595,898,895,479,527,395,281,95,301,117,357,839,855
|
||||
749,760,326,866,176,127,184,610,524,703,365,82,559,68,118,828,558,587,520,170
|
||||
905,457,569,641,610,849,226,223,517,740,407,843,905,738,360,115,92,228,59,987
|
||||
126,744,503,144,929,684,617,322,220,607,590,584,687,127,941,228,881,415,500,945
|
||||
475,495,582,51,57,595,400,217,646,134,50,153,185,212,698,876,228,347,736,604
|
||||
518,770,797,608,499,906,702,946,622,173,820,580,564,68,601,774,728,625,894,932
|
||||
320,700,588,572,539,470,570,548,556,859,767,284,245,948,411,924,830,935,288,692
|
||||
66,497,934,756,122,550,948,692,590,867,104,402,551,766,165,637,405,214,184,288
|
||||
363,675,211,426,549,115,321,690,595,566,867,843,883,220,598,54,604,837,483,420
|
||||
341,832,534,576,538,760,522,521,176,685,482,472,498,882,697,397,739,947,54,368
|
||||
777,469,466,123,111,613,236,846,494,191,218,575,800,611,498,193,364,932,633,188
|
||||
865,258,559,516,587,521,678,100,217,517,744,765,499,176,740,826,325,634,357,560
|
||||
429,505,736,515,495,702,938,281,152,680,925,193,880,117,494,841,631,110,576,123
|
||||
631,942,693,804,610,882,716,228,527,490,135,170,498,675,211,363,229,900,415,400
|
||||
62,900,736,564,483,99,512,946,210,209,767,92,833,187,117,412,898,627,749,711
|
||||
768,427,536,695,639,730,604,713,470,699,692,555,748,865,216,95,642,630,496,877
|
||||
505,626,759,772,151,590,227,505,849,680,551,580,203,223,836,579,754,408,288,168
|
||||
582,556,557,870,573,352,601,455,422,406,133,548,125,874,866,126,65,497,447,902
|
||||
174,62,357,591,219,836,528,588,903,129,864,335,525,851,124,731,397,754,880,104
|
||||
286,179,703,646,261,192,475,568,700,803,630,761,349,360,529,769,876,330,797,407
|
||||
575,63,937,450,943,129,484,399,159,642,942,462,417,368,406,506,694,990,702,570
|
||||
640,771,349,527,99,353,905,590,897,599,488,89,804,768,526,450,516,827,562,202
|
||||
852,584,998,584,584,406,726,868,554,690,587,349,451,69,104,733,397,183,773,156
|
||||
554,445,220,417,758,385,797,519,637,55,734,415,838,697,487,871,614,884,836,495
|
||||
425,881,508,865,497,774,598,102,134,322,360,350,676,408,211,559,606,416,474,460
|
||||
288,204,800,943,774,752,302,362,729,349,132,877,499,132,511,414,935,64,120,769
|
||||
864,638,568,282,504,646,394,114,774,580,325,513,552,258,413,868,905,826,155,469
|
||||
114,464,747,63,428,822,829,503,846,551,695,413,355,68,929,503,501,767,493,948
|
||||
583,577,250,55,521,542,777,507,613,630,109,678,635,752,804,700,875,495,938,410
|
||||
898,217,596,764,944,404,180,555,642,903,861,361,394,613,65,570,170,453,524,564
|
||||
401,849,744,590,545,161,503,568,159,286,327,213,865,348,529,686,330,769,423,327
|
||||
841,743,944,323,898,538,505,593,929,578,322,169,553,406,426,616,539,445,120,630
|
||||
861,470,636,747,468,900,619,897,548,310,939,171,111,755,328,901,360,409,553,183
|
||||
60,878,648,929,580,54,89,499,135,552,449,735,470,776,906,530,745,767,740,185
|
||||
221,496,747,508,894,421,535,289,800,457,257,176,517,422,549,114,534,287,686,489
|
||||
210,396,367,87,588,404,112,157,761,767,353,105,906,9,527,174,634,178,619,605
|
||||
699,406,577,742,561,589,544,289,864,93,333,732,726,61,583,428,605,261,684,360
|
||||
353,422,898,168,214,281,738,363,462,674,194,469,554,571,876,566,445,498,159,259
|
||||
88,684,191,496,512,121,632,538,675,456,745,306,935,773,497,550,778,853,933,756
|
||||
285,399,191,364,132,634,545,799,428,106,450,802,906,613,520,983,931,526,526,128
|
||||
393,351,222,184,126,290,874,492,799,189,483,947,24,61,568,355,751,680,848,939
|
||||
850,550,321,705,621,882,401,362,180,539,804,568,466,356,451,50,863,902,525,400
|
||||
626,364,59,727,610,356,112,172,518,594,213,157,949,480,501,171,182,133,271,284
|
||||
683,329,328,173,903,686,830,853,69,893,633,897,327,492,874,365,982,834,581,167
|
||||
158,631,725,732,94,157,100,924,847,122,547,21,520,855,572,494,928,726,510,604
|
||||
448,416,521,295,804,260,833,885,897,257,107,285,697,186,94,133,327,926,395,695
|
||||
499,360,700,18,217,323,50,462,100,66,399,635,327,516,935,399,534,451,680,727
|
||||
871,561,559,151,745,638,735,165,540,506,676,941,167,200,491,797,485,357,462,159
|
||||
882,678,465,103,803,885,322,517,630,742,258,189,274,942,93,183,395,771,691,421
|
||||
777,683,112,67,686,934,410,449,729,699,477,192,749,116,559,66,653,743,601,158
|
||||
873,874,327,695,835,366,675,729,166,545,613,142,162,219,593,546,427,152,902,636
|
||||
701,834,770,405,394,868,921,186,326,458,748,696,801,183,677,86,838,447,507,799
|
||||
739,744,597,226,167,94,92,662,797,163,603,636,368,476,289,355,349,428,632,858
|
||||
356,464,480,122,100,510,178,549,418,649,614,66,736,61,131,703,930,454,696,501
|
||||
446,329,850,898,411,483,220,937,421,510,738,514,603,492,706,398,62,494,520,99
|
||||
682,58,630,211,127,544,119,461,867,471,765,929,219,217,881,160,420,490,483,363
|
||||
606,835,897,563,150,679,367,419,536,899,537,117,574,512,577,215,612,702,508,941
|
||||
446,635,456,940,851,216,255,579,543,173,229,614,66,585,179,428,944,634,696,607
|
||||
643,408,501,351,157,737,607,581,173,53,733,941,748,363,468,860,480,548,713,411
|
||||
460,984,360,156,166,167,753,220,60,161,834,491,574,935,696,469,258,620,105,737
|
||||
233,284,803,874,698,842,833,633,526,604,50,697,216,827,466,862,756,864,610,358
|
||||
815,496,58,564,220,507,581,742,185,401,118,635,931,760,393,857,893,585,484,193
|
||||
946,322,897,489,602,448,211,773,148,937,774,178,924,947,479,539,486,870,872,576
|
||||
628,506,681,59,172,597,146,758,301,758,703,934,547,570,695,570,523,748,176,573
|
||||
725,54,930,421,631,177,19,616,357,98,476,61,229,356,155,626,60,873,454,110
|
||||
415,419,229,272,700,531,568,50,726,459,133,745,869,580,108,732,215,470,868,924
|
||||
219,175,177,356,847,879,211,932,853,675,732,753,425,215,579,695,492,257,415,929
|
||||
461,583,156,455,127,506,471,759,347,940,368,726,223,185,450,327,112,901,978,505
|
||||
679,62,609,477,744,123,263,583,568,476,743,162,761,760,679,518,526,939,602,285
|
||||
194,367,619,336,62,851,195,900,619,407,773,640,543,322,563,622,600,696,679,559
|
||||
897,591,404,79,213,577,803,605,556,939,949,594,52,893,286,476,61,496,797,321
|
||||
906,609,742,572,602,933,340,544,940,101,171,847,609,218,134,285,213,515,881,692
|
||||
539,445,773,870,756,82,754,855,687,396,587,167,281,116,175,427,803,54,797,537
|
||||
295,638,690,156,700,124,896,192,685,538,699,469,411,92,103,327,101,181,852,598
|
||||
688,640,58,258,229,175,603,566,883,745,120,751,361,983,895,152,871,776,565,475
|
||||
571,110,473,844,182,325,282,474,800,848,720,872,580,463,642,637,302,937,565,54
|
||||
884,477,454,11,851,768,155,427,617,894,395,471,127,756,119,349,499,933,569,367
|
||||
755,159,620,255,403,541,639,215,619,155,121,880,512,758,132,169,859,488,831,511
|
||||
733,869,737,830,169,174,163,194,931,891,99,209,743,101,570,934,100,156,642,63
|
||||
474,487,517,162,426,690,355,924,188,467,195,189,67,623,537,160,51,257,750,163
|
||||
773,597,167,448,992,485,524,749,839,414,581,419,69,544,155,302,108,489,210,640
|
||||
152,488,736,115,55,206,732,756,631,878,261,214,354,465,365,559,576,552,105,155
|
||||
114,411,759,2,478,283,569,394,607,488,524,678,90,870,856,581,941,844,184,111
|
||||
152,161,638,357,757,758,328,618,186,96,630,891,428,536,353,68,603,54,702,599
|
||||
168,170,603,134,769,278,853,447,219,743,526,450,729,457,289,758,842,102,493,758
|
||||
66,86,681,483,684,730,855,13,731,505,531,558,351,364,550,195,519,365,393,518
|
||||
857,544,529,602,566,333,499,414,181,778,357,112,134,539,901,135,827,697,854,53
|
||||
686,461,208,530,879,871,863,727,489,613,893,397,860,732,92,899,459,850,133,420
|
||||
853,701,562,352,54,574,423,428,495,746,759,355,507,737,540,777,456,179,587,91
|
||||
195,936,925,221,178,739,161,854,320,257,569,754,141,475,633,418,177,402,106,577
|
||||
535,329,629,684,877,727,509,750,727,158,537,527,514,461,321,574,769,320,647,679
|
||||
215,568,691,508,841,295,57,736,172,564,213,597,500,933,479,557,445,288,551,777
|
||||
478,597,540,116,494,449,10,101,546,611,67,777,482,408,409,130,578,212,636,934
|
||||
588,857,728,926,620,355,600,358,153,481,753,228,227,702,687,182,710,592,640,604
|
||||
381,565,728,741,221,522,215,615,590,494,154,569,760,747,926,530,56,411,875,367
|
||||
931,404,258,462,642,529,347,510,613,473,942,897,617,829,623,420,633,507,989,393
|
||||
211,449,284,518,593,840,94,133,126,518,144,540,504,521,857,884,602,587,460,941
|
||||
185,619,688,495,594,748,617,398,626,862,491,207,850,60,548,623,641,777,393,411
|
||||
898,404,559,524,461,488,898,773,870,59,641,778,528,399,462,54,67,450,82,498
|
||||
64,588,21,287,465,621,542,452,584,568,745,841,639,395,878,86,120,635,760,481
|
||||
734,282,753,261,469,180,114,578,284,945,755,715,924,92,799,122,213,113,104,514
|
||||
107,427,257,703,673,846,258,700,747,216,593,686,736,729,607,850,756,874,804,590
|
||||
540,549,180,156,496,124,124,871,118,193,596,865,350,110,66,119,1,855,640,464
|
||||
55,740,893,196,53,63,68,548,896,479,587,525,600,867,119,753,479,948,517,632
|
||||
846,480,885,573,494,680,358,949,56,498,583,471,193,663,859,452,412,506,566,359
|
||||
668,934,692,367,732,923,748,99,947,697,222,56,864,492,880,527,495,875,906,451
|
||||
562,91,529,354,728,423,288,400,467,177,881,221,539,834,942,448,455,178,800,466
|
||||
480,538,525,463,585,612,474,159,898,463,771,727,674,945,356,86,754,12,602,744
|
||||
183,935,224,324,287,700,801,755,364,705,68,454,419,861,857,846,356,326,301,533
|
||||
646,634,626,414,185,173,700,873,754,474,949,52,573,220,851,535,862,601,829,931
|
||||
866,584,746,402,350,751,754,588,762,863,584,555,580,565,225,868,868,193,88,531
|
||||
184,847,898,758,509,838,285,100,574,4,92,727,69,89,323,534,570,574,364,700
|
||||
773,67,591,402,512,753,509,624,213,123,157,298,511,164,501,445,222,401,496,545
|
||||
447,928,683,937,363,132,755,775,550,595,280,676,466,728,883,676,404,170,624,941
|
||||
540,455,903,484,302,804,302,742,944,569,186,927,777,400,688,504,546,564,554,15
|
||||
868,469,102,594,534,622,90,153,228,894,676,501,521,181,609,924,980,185,929,160
|
||||
214,614,107,586,52,582,112,482,114,757,410,609,827,948,161,893,198,398,212,421
|
||||
185,209,678,923,576,182,167,134,802,407,352,575,651,120,193,501,421,527,692,101
|
||||
445,539,361,605,125,522,72,552,623,482,760,326,188,898,750,933,604,692,905,176
|
||||
511,928,321,747,586,611,626,679,470,117,347,60,765,828,478,858,115,100,170,357
|
||||
762,751,677,349,694,865,868,619,157,928,165,558,492,829,453,574,727,743,537,496
|
||||
906,739,628,466,182,715,899,855,361,328,872,412,691,105,865,177,91,500,402,860
|
||||
719,95,933,551,735,597,690,608,479,847,92,118,827,105,193,728,726,135,482,876
|
||||
517,468,212,668,895,529,627,128,462,355,357,360,323,301,99,680,693,502,111,394
|
||||
735,802,625,259,364,760,95,283,928,176,929,524,299,593,840,832,323,129,61,878
|
||||
948,712,257,854,619,213,540,856,562,883,580,504,739,97,742,445,798,519,604,739
|
||||
527,695,855,743,459,540,544,536,932,932,872,486,455,248,575,220,473,893,450,158
|
||||
281,215,570,91,591,489,643,261,274,687,63,65,177,177,846,637,882,404,180,894
|
||||
106,416,356,926,944,458,19,580,528,215,850,935,927,399,69,761,941,851,730,258
|
||||
947,257,618,153,184,357,859,320,554,611,297,91,355,487,837,871,412,864,472,122
|
||||
591,99,86,521,399,396,647,397,848,773,525,93,800,927,454,517,592,893,756,592
|
||||
103,854,498,88,290,529,130,694,167,282,992,51,874,515,492,538,490,873,678,454
|
||||
259,945,171,512,639,925,684,830,64,637,642,458,360,349,147,873,330,164,729,364
|
||||
728,829,483,259,560,685,177,451,177,477,607,680,161,301,101,134,358,20,861,926
|
||||
733,602,875,641,932,349,947,393,212,678,217,403,636,69,450,541,882,600,297,631
|
||||
356,64,422,745,638,216,885,90,185,884,154,574,285,607,476,99,550,120,152,839
|
||||
832,631,942,741,458,353,467,219,605,769,570,516,848,771,465,99,149,348,880,696
|
||||
169,599,902,490,777,420,349,801,161,197,859,838,932,395,448,933,120,220,731,185
|
||||
623,558,994,412,58,286,944,155,102,156,850,124,840,896,129,842,465,515,835,127
|
||||
526,211,403,190,187,408,505,570,559,493,542,356,935,610,255,530,937,258,497,407
|
||||
680,368,864,745,761,393,179,834,186,754,547,646,827,750,777,57,935,161,159,94
|
||||
103,452,996,874,450,906,59,738,686,366,168,494,123,185,804,754,775,903,746,97
|
||||
641,635,768,62,51,762,526,726,931,485,166,840,181,754,475,104,598,870,302,636
|
||||
895,451,846,129,53,880,125,578,363,469,835,508,604,458,797,942,509,125,20,603
|
||||
977,128,557,622,728,859,352,465,526,693,213,468,896,829,92,582,96,483,852,868
|
||||
929,728,845,676,939,461,866,743,480,116,62,734,57,152,894,495,872,707,90,616
|
||||
676,878,768,543,216,195,868,322,160,603,325,824,415,638,171,488,904,104,847,468
|
||||
176,843,560,897,112,640,583,556,844,61,203,928,575,528,738,217,258,496,928,733
|
||||
330,534,456,554,421,227,765,224,742,400,170,457,846,489,610,545,226,122,900,60
|
||||
505,131,488,894,428,448,571,642,181,411,130,454,583,724,760,452,472,760,281,693
|
||||
630,446,420,809,826,859,129,187,602,842,287,214,131,694,416,879,770,837,676,769
|
||||
774,532,176,775,588,677,405,597,715,804,212,58,420,826,281,799,497,284,758,114
|
||||
215,993,733,325,776,365,325,54,544,285,755,115,774,895,614,885,642,514,738,927
|
||||
623,602,746,854,760,126,88,465,616,761,758,797,825,834,799,948,458,65,551,799
|
||||
852,348,522,108,631,124,693,867,544,686,496,703,183,409,23,642,754,284,221,478
|
||||
247,688,93,479,862,504,290,467,325,535,215,857,925,362,160,112,286,323,96,542
|
||||
940,353,688,568,903,156,693,877,877,121,624,178,91,140,514,94,532,761,538,744
|
||||
157,116,217,904,591,552,555,133,729,566,759,248,358,841,522,925,484,163,544,740
|
||||
417,842,119,612,135,595,815,801,939,906,571,446,557,800,800,617,512,124,586,64
|
||||
701,604,904,365,252,745,54,566,700,551,689,753,943,477,510,349,492,216,505,118
|
||||
849,61,899,97,723,642,797,546,105,92,289,832,596,578,108,125,212,281,948,358
|
||||
214,482,749,168,614,640,208,594,533,574,620,353,590,852,830,57,449,412,628,322
|
||||
354,776,725,902,412,177,448,682,610,422,462,799,106,213,840,860,410,767,475,321
|
||||
926,550,130,870,466,255,190,491,322,589,260,837,758,844,478,115,59,638,831,490
|
||||
215,367,184,170,223,882,511,615,807,748,324,832,416,103,742,801,475,553,851,96
|
||||
884,394,856,591,564,258,135,835,254,187,497,857,547,681,59,486,506,681,494,827
|
||||
138,573,394,531,356,105,839,731,593,680,614,523,404,594,65,455,330,221,489,619
|
||||
881,687,461,352,469,159,174,423,192,539,508,350,535,415,112,905,862,169,679,850
|
||||
416,488,681,546,606,139,760,427,868,541,616,599,900,504,561,528,505,702,742,948
|
||||
588,260,559,611,158,153,182,497,901,648,840,94,803,406,627,903,519,513,643,212
|
||||
870,934,586,799,161,638,852,173,608,322,422,289,925,726,499,468,445,111,897,883
|
||||
505,881,593,155,448,101,524,206,513,176,736,926,591,68,466,490,895,163,287,259
|
||||
606,540,415,448,602,400,399,557,859,599,660,325,803,837,288,876,160,690,932,498
|
||||
528,693,869,93,998,940,865,571,161,185,452,800,701,415,480,521,169,456,802,867
|
||||
396,534,841,880,727,560,445,737,745,292,326,471,578,288,519,943,871,585,64,949
|
||||
866,703,281,358,944,994,457,750,627,587,507,680,473,544,933,535,850,211,852,606
|
||||
547,580,409,510,588,307,517,219,520,757,944,689,126,768,481,189,55,827,874,366
|
||||
615,560,417,185,924,170,744,415,932,344,88,355,847,490,221,831,395,192,498,773
|
||||
934,943,836,676,489,173,293,736,471,641,288,500,680,194,596,186,555,228,109,420
|
||||
914,602,902,874,218,129,492,689,738,118,121,751,942,874,893,855,778,545,857,544
|
||||
457,325,531,881,682,526,837,223,751,642,209,488,937,410,587,944,547,746,821,352
|
||||
777,836,861,64,328,506,68,351,365,827,164,351,169,181,930,738,677,690,988,834
|
@ -32,5 +32,5 @@ def part2(inp):
|
||||
print(f"Cumulative product of tress : {tree_product}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
part1('input.txt')
|
||||
#part1('./input.txt')
|
||||
part2('input.txt')
|
||||
|
51
day5/day5.py
51
day5/day5.py
@ -1,6 +1,5 @@
|
||||
#! /usr/bin/env python3
|
||||
from itertools import product
|
||||
from bisect import bisect
|
||||
|
||||
|
||||
def main(filename):
|
||||
@ -24,42 +23,34 @@ def part1(results):
|
||||
def part2(results):
|
||||
seat_ids = sorted(x[2] for x in results.values())
|
||||
missing_seat_ids = set(range(max(seat_ids))) - set(seat_ids)
|
||||
print("Your seat id : ", max(missing_seat_ids))
|
||||
print(missing_seat_ids)
|
||||
|
||||
|
||||
def parse_boarding_pass(boarding_pass, strategy="binary"):
|
||||
"Poor man's dispatcher"
|
||||
try:
|
||||
to_call = globals()[f"parse_boarding_pass_{strategy}"]
|
||||
return to_call(boarding_pass)
|
||||
except KeyError:
|
||||
raise KeyError(f"Bad strategy name {strategy}")
|
||||
|
||||
|
||||
def parse_boarding_pass_binary(boarding_pass):
|
||||
"Parse boarding pass using a binary conversion"
|
||||
boarding_pass = boarding_pass.translate(str.maketrans("FLBR", "0011"))
|
||||
row = boarding_pass[:7]
|
||||
col = boarding_pass[7:]
|
||||
return int(row, base=2), int(col, base=2)
|
||||
|
||||
|
||||
def parse_boarding_pass_bisect(boarding_pass):
|
||||
"Pass boarding pass using bisection algorithm"
|
||||
row = bisect(boarding_pass[:7], lower_option="F", upper_option="B", max=127)
|
||||
col = bisect(boarding_pass[7:], lower_option="L", upper_option="R", max=7)
|
||||
def parse_boarding_pass(boarding_pass):
|
||||
row = _parse(boarding_pass[:7], "F", "B", 128)
|
||||
col = _parse(boarding_pass[7:], "L", "R", 7)
|
||||
return row, col
|
||||
|
||||
|
||||
def bisect(inp, lower_option, upper_option, max):
|
||||
min_v, max_v = 0, max
|
||||
def _parse(inp, lower_option, upper_option, number):
|
||||
rows = slice(0, number - 1)
|
||||
for l in inp:
|
||||
length = max_v - min_v
|
||||
if l == lower_option:
|
||||
max_v = min_v + length // 2
|
||||
elif l == upper_option:
|
||||
min_v = 1 + min_v + length // 2
|
||||
return min_v
|
||||
rows = lower_half(rows)
|
||||
else:
|
||||
rows = upper_half(rows)
|
||||
return rows.start
|
||||
|
||||
|
||||
def lower_half(sl: slice):
|
||||
length = sl.stop - sl.start
|
||||
return slice(sl.start, sl.start + length // 2)
|
||||
|
||||
|
||||
def upper_half(sl: slice):
|
||||
length = sl.stop - sl.start
|
||||
return slice(1 + sl.start + length // 2, sl.stop)
|
||||
|
||||
|
||||
def get_seat_id(row, col):
|
||||
return 8 * row + col
|
||||
|
@ -1,5 +1,5 @@
|
||||
#! /usr/bin/env python3
|
||||
from day5 import *
|
||||
from day6 import parse_boarding_pass, get_seat_id
|
||||
|
||||
def tests():
|
||||
inputs = {
|
||||
@ -9,13 +9,8 @@ def tests():
|
||||
"BBFFBBFRLL": (102, 4, 820)
|
||||
}
|
||||
|
||||
test("bisect", inputs)
|
||||
test("binary", inputs)
|
||||
|
||||
|
||||
def test(strategy, inputs):
|
||||
for boarding_pass, expected in inputs.items():
|
||||
row, col = parse_boarding_pass(boarding_pass, strategy=strategy)
|
||||
row, col = parse_boarding_pass(boarding_pass)
|
||||
seat_id = get_seat_id(row, col)
|
||||
assert row == expected[0]
|
||||
assert col == expected[1]
|
||||
|
47
day7/day7.py
47
day7/day7.py
@ -1,47 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import re
|
||||
from collections import defaultdict, deque
|
||||
|
||||
|
||||
def main(inp):
|
||||
with open(inp) as input_rules:
|
||||
rules = parse_rules(input_rules)
|
||||
reverse_rules = build_reverse_rules(rules)
|
||||
print(part1(reverse_rules))
|
||||
print(part2(rules, "shiny gold"))
|
||||
|
||||
|
||||
def parse_rules(input_rules):
|
||||
rules = {}
|
||||
for input_rule in input_rules:
|
||||
color, rule = input_rule.split(" bags contain ")
|
||||
rules[color] = {color: int(number) for number, color in re.findall('(\d+) (\w+ \w+)', rule)}
|
||||
return rules
|
||||
|
||||
|
||||
def build_reverse_rules(rules):
|
||||
reverse_rules = defaultdict(list)
|
||||
for bag, inner_rules in rules.items():
|
||||
for c in inner_rules:
|
||||
reverse_rules[c].append(bag)
|
||||
return reverse_rules
|
||||
|
||||
|
||||
def part1(reverse_rules):
|
||||
queue = deque(("shiny gold",))
|
||||
may_contain_shiny_gold = set()
|
||||
while queue:
|
||||
color = queue.pop()
|
||||
for c in reverse_rules.get(color, []):
|
||||
if c not in may_contain_shiny_gold:
|
||||
may_contain_shiny_gold.add(c)
|
||||
queue.appendleft(c)
|
||||
return len(may_contain_shiny_gold)
|
||||
|
||||
|
||||
def part2(rules, color):
|
||||
return sum(number + number * part2(rules, c) for c, number in rules[color].items())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main("input.txt")
|
594
day7/input.txt
594
day7/input.txt
@ -1,594 +0,0 @@
|
||||
pale cyan bags contain 2 posh black bags, 4 wavy gold bags, 2 vibrant brown bags.
|
||||
dull lavender bags contain 3 pale tomato bags.
|
||||
light red bags contain 3 wavy teal bags, 3 plaid aqua bags, 4 drab lavender bags, 2 bright coral bags.
|
||||
wavy green bags contain 3 wavy indigo bags.
|
||||
bright blue bags contain 5 vibrant tan bags.
|
||||
dotted fuchsia bags contain 5 dark orange bags, 1 shiny coral bag.
|
||||
pale tomato bags contain 2 bright magenta bags, 5 dull lime bags.
|
||||
light black bags contain 1 posh lavender bag, 5 dotted gold bags, 4 faded bronze bags.
|
||||
wavy turquoise bags contain 4 pale teal bags, 2 dim brown bags, 5 muted lime bags.
|
||||
striped red bags contain 4 faded brown bags, 4 dotted purple bags.
|
||||
wavy silver bags contain 5 muted chartreuse bags, 1 light silver bag, 3 striped silver bags.
|
||||
posh lavender bags contain 5 striped silver bags, 3 wavy beige bags, 3 dim brown bags, 5 clear indigo bags.
|
||||
pale maroon bags contain 1 striped white bag, 4 light blue bags.
|
||||
drab turquoise bags contain 2 shiny tomato bags.
|
||||
dark aqua bags contain 2 plaid silver bags.
|
||||
vibrant coral bags contain 3 wavy lime bags, 2 shiny gold bags, 1 dotted orange bag, 3 muted indigo bags.
|
||||
clear green bags contain 1 clear olive bag.
|
||||
striped indigo bags contain 3 striped turquoise bags.
|
||||
clear lime bags contain 3 mirrored green bags, 2 light tan bags.
|
||||
drab bronze bags contain 5 plaid lavender bags, 1 muted yellow bag, 5 vibrant coral bags.
|
||||
drab lavender bags contain 1 posh tomato bag, 4 muted salmon bags, 4 dull lime bags.
|
||||
striped aqua bags contain 1 pale maroon bag.
|
||||
wavy gray bags contain 3 light tan bags, 2 pale white bags, 2 bright magenta bags, 5 muted salmon bags.
|
||||
faded aqua bags contain 1 plaid salmon bag, 4 dotted yellow bags.
|
||||
drab cyan bags contain 1 posh tomato bag, 4 shiny turquoise bags.
|
||||
vibrant blue bags contain no other bags.
|
||||
light lime bags contain 3 vibrant purple bags.
|
||||
clear gray bags contain 3 mirrored olive bags, 3 clear crimson bags, 5 dark orange bags, 2 dim gold bags.
|
||||
bright magenta bags contain no other bags.
|
||||
wavy purple bags contain 4 dim gold bags, 5 light green bags.
|
||||
muted bronze bags contain 2 pale beige bags, 2 clear turquoise bags, 5 posh white bags, 1 wavy gray bag.
|
||||
striped violet bags contain 1 light gold bag.
|
||||
dull salmon bags contain 2 posh gray bags, 2 dotted blue bags.
|
||||
striped orange bags contain 3 faded coral bags, 3 dotted lavender bags.
|
||||
drab coral bags contain 1 wavy indigo bag, 1 dull black bag, 3 mirrored chartreuse bags.
|
||||
plaid yellow bags contain 5 faded cyan bags.
|
||||
dark maroon bags contain 2 mirrored silver bags, 5 muted salmon bags, 1 dull tomato bag.
|
||||
dark yellow bags contain 1 drab maroon bag, 5 faded cyan bags, 4 clear indigo bags.
|
||||
posh teal bags contain 3 vibrant maroon bags, 3 posh salmon bags.
|
||||
mirrored black bags contain 1 drab fuchsia bag, 2 posh red bags.
|
||||
drab salmon bags contain 2 dull plum bags.
|
||||
muted green bags contain 4 plaid gray bags, 2 dim turquoise bags, 2 dull coral bags, 4 dim white bags.
|
||||
bright indigo bags contain 1 bright turquoise bag, 4 dark beige bags.
|
||||
wavy fuchsia bags contain 1 clear violet bag, 4 striped bronze bags, 1 mirrored indigo bag, 1 shiny cyan bag.
|
||||
bright brown bags contain 5 dark purple bags.
|
||||
dull turquoise bags contain 3 dim yellow bags, 2 dim indigo bags.
|
||||
pale coral bags contain 4 posh indigo bags.
|
||||
striped green bags contain 4 dull green bags, 5 dotted turquoise bags, 3 pale red bags, 2 dark gold bags.
|
||||
faded maroon bags contain 3 dim green bags, 4 wavy purple bags.
|
||||
vibrant lime bags contain 3 shiny fuchsia bags, 1 pale red bag, 1 vibrant bronze bag.
|
||||
shiny plum bags contain 2 bright maroon bags, 5 dull tomato bags, 2 plaid salmon bags, 3 bright lime bags.
|
||||
faded silver bags contain 1 posh turquoise bag, 5 posh white bags, 5 wavy lime bags, 3 shiny coral bags.
|
||||
mirrored tomato bags contain 3 dotted tomato bags, 4 vibrant blue bags, 4 dull yellow bags, 5 clear chartreuse bags.
|
||||
pale red bags contain 5 vibrant indigo bags, 4 vibrant red bags, 3 bright magenta bags, 3 dim indigo bags.
|
||||
drab blue bags contain 2 bright magenta bags.
|
||||
dim purple bags contain 4 drab lavender bags, 4 plaid yellow bags, 5 dull white bags, 3 clear white bags.
|
||||
dim red bags contain 5 striped silver bags, 1 shiny red bag.
|
||||
dim lime bags contain 5 plaid bronze bags, 5 drab salmon bags.
|
||||
mirrored beige bags contain 3 bright tomato bags, 2 dull lime bags.
|
||||
bright lime bags contain 5 clear chartreuse bags.
|
||||
clear chartreuse bags contain 1 muted white bag, 1 vibrant bronze bag, 2 vibrant maroon bags, 4 clear lime bags.
|
||||
dotted indigo bags contain 4 pale olive bags, 1 bright violet bag, 3 drab gray bags.
|
||||
striped crimson bags contain 3 muted salmon bags.
|
||||
plaid green bags contain 3 posh tomato bags.
|
||||
dim brown bags contain 3 striped teal bags, 3 vibrant aqua bags, 3 plaid yellow bags.
|
||||
faded turquoise bags contain 2 dim blue bags, 3 clear green bags, 3 striped bronze bags, 2 dim beige bags.
|
||||
dotted coral bags contain 2 vibrant silver bags, 3 plaid crimson bags, 4 dull silver bags, 1 muted blue bag.
|
||||
mirrored magenta bags contain 3 striped teal bags, 1 mirrored black bag, 4 shiny black bags.
|
||||
shiny gray bags contain 3 bright magenta bags.
|
||||
mirrored violet bags contain 5 drab blue bags, 5 dark brown bags.
|
||||
dark beige bags contain 2 vibrant blue bags, 2 bright magenta bags, 1 dim indigo bag.
|
||||
dark bronze bags contain 3 vibrant chartreuse bags, 2 posh turquoise bags, 4 faded aqua bags.
|
||||
clear turquoise bags contain 1 mirrored green bag, 1 faded indigo bag, 4 shiny aqua bags, 4 dim tomato bags.
|
||||
dark silver bags contain 5 posh purple bags, 4 dull silver bags.
|
||||
dull tan bags contain 2 striped brown bags, 3 vibrant salmon bags, 1 drab gold bag.
|
||||
mirrored gray bags contain 2 dim white bags, 4 muted white bags, 1 muted orange bag, 3 muted magenta bags.
|
||||
faded black bags contain 3 faded aqua bags, 4 drab white bags, 2 dull lavender bags, 1 bright purple bag.
|
||||
light fuchsia bags contain 3 pale magenta bags.
|
||||
wavy lavender bags contain no other bags.
|
||||
dull black bags contain 1 mirrored teal bag.
|
||||
vibrant chartreuse bags contain 1 dull violet bag, 4 posh turquoise bags.
|
||||
posh yellow bags contain 5 wavy gold bags.
|
||||
shiny teal bags contain 2 drab salmon bags, 5 striped crimson bags.
|
||||
plaid fuchsia bags contain 3 dim brown bags, 2 posh bronze bags, 1 striped aqua bag, 1 shiny chartreuse bag.
|
||||
faded yellow bags contain 1 dotted tan bag, 3 dark coral bags.
|
||||
mirrored orange bags contain 3 pale coral bags.
|
||||
wavy indigo bags contain 5 shiny coral bags, 2 shiny yellow bags, 2 striped brown bags.
|
||||
dotted salmon bags contain 1 drab turquoise bag, 1 vibrant lime bag, 3 dull chartreuse bags, 1 vibrant maroon bag.
|
||||
dull magenta bags contain 3 shiny coral bags, 5 dull violet bags, 5 mirrored violet bags.
|
||||
shiny tomato bags contain 1 dim salmon bag, 1 dim olive bag.
|
||||
drab gold bags contain 3 drab maroon bags, 1 dotted black bag, 4 plaid orange bags.
|
||||
bright yellow bags contain 4 muted teal bags, 1 faded maroon bag, 5 posh chartreuse bags, 5 plaid indigo bags.
|
||||
dull plum bags contain 1 shiny salmon bag, 3 light tan bags.
|
||||
posh gray bags contain 3 muted lime bags, 2 dotted green bags.
|
||||
clear violet bags contain 5 vibrant maroon bags.
|
||||
dotted bronze bags contain 3 light tan bags, 4 shiny yellow bags, 3 mirrored brown bags, 1 plaid yellow bag.
|
||||
mirrored lime bags contain 2 bright teal bags, 2 dim gold bags, 2 dull tomato bags, 3 wavy green bags.
|
||||
shiny indigo bags contain 3 dull silver bags, 2 dim cyan bags, 2 striped magenta bags.
|
||||
vibrant crimson bags contain 2 light chartreuse bags.
|
||||
dim magenta bags contain 5 plaid olive bags, 2 muted green bags, 4 bright crimson bags.
|
||||
dim blue bags contain 1 bright silver bag, 2 shiny gray bags.
|
||||
plaid teal bags contain 4 shiny aqua bags, 1 dull fuchsia bag, 4 bright lime bags.
|
||||
dull teal bags contain 2 dotted black bags.
|
||||
plaid gray bags contain 5 muted brown bags.
|
||||
pale teal bags contain 5 striped olive bags, 1 dotted fuchsia bag, 3 dark teal bags, 2 dim purple bags.
|
||||
clear beige bags contain 3 pale lime bags, 4 striped aqua bags, 3 mirrored red bags.
|
||||
mirrored green bags contain 4 mirrored olive bags, 5 dim salmon bags, 4 vibrant bronze bags.
|
||||
plaid aqua bags contain 2 pale white bags, 1 dull plum bag, 4 mirrored olive bags, 3 dim maroon bags.
|
||||
pale aqua bags contain 5 bright salmon bags, 4 vibrant silver bags, 2 light orange bags.
|
||||
plaid crimson bags contain 3 striped magenta bags.
|
||||
mirrored red bags contain 5 dull coral bags, 5 pale yellow bags, 5 drab maroon bags, 2 dim gray bags.
|
||||
pale black bags contain 1 light red bag, 4 faded teal bags.
|
||||
dim turquoise bags contain 5 faded purple bags, 4 wavy fuchsia bags, 3 vibrant purple bags, 2 pale beige bags.
|
||||
dim lavender bags contain 1 light blue bag.
|
||||
pale gray bags contain 3 mirrored red bags, 5 light indigo bags.
|
||||
clear magenta bags contain 5 bright gold bags, 5 dim lavender bags, 1 wavy lavender bag.
|
||||
dull gold bags contain 4 dull fuchsia bags, 3 vibrant tan bags.
|
||||
dim salmon bags contain 5 dull yellow bags, 4 pale beige bags.
|
||||
drab magenta bags contain 2 vibrant salmon bags.
|
||||
vibrant green bags contain 3 bright purple bags, 5 wavy brown bags, 5 dotted gray bags, 1 posh bronze bag.
|
||||
dull brown bags contain 1 wavy tan bag, 1 shiny salmon bag.
|
||||
clear white bags contain 5 bright lime bags, 3 light tan bags.
|
||||
dotted lavender bags contain 5 wavy cyan bags, 2 dark indigo bags, 4 shiny gold bags.
|
||||
dotted purple bags contain 5 dull teal bags, 3 shiny plum bags.
|
||||
drab yellow bags contain 3 faded beige bags, 3 light silver bags.
|
||||
dark orange bags contain 5 bright lime bags.
|
||||
dotted cyan bags contain 1 vibrant lime bag, 1 wavy maroon bag, 2 dull tan bags, 5 shiny salmon bags.
|
||||
posh indigo bags contain 5 dull yellow bags, 1 vibrant bronze bag.
|
||||
dull chartreuse bags contain 2 wavy lavender bags, 5 vibrant blue bags.
|
||||
posh blue bags contain 3 wavy maroon bags.
|
||||
dim teal bags contain 3 muted turquoise bags, 1 vibrant black bag, 5 dotted tomato bags.
|
||||
pale purple bags contain 1 striped olive bag.
|
||||
drab chartreuse bags contain 1 clear orange bag, 2 plaid turquoise bags, 2 drab maroon bags.
|
||||
plaid white bags contain 4 plaid indigo bags, 5 vibrant lime bags.
|
||||
vibrant bronze bags contain 5 vibrant blue bags, 1 drab blue bag, 1 dull lime bag.
|
||||
bright bronze bags contain 3 muted magenta bags, 3 dotted black bags, 1 pale lime bag, 2 dull violet bags.
|
||||
dark indigo bags contain 3 bright maroon bags.
|
||||
muted lavender bags contain 1 light white bag, 2 clear white bags, 2 posh white bags, 3 dim purple bags.
|
||||
vibrant violet bags contain 5 dull magenta bags, 4 posh coral bags.
|
||||
drab beige bags contain 2 plaid magenta bags, 2 muted bronze bags, 2 muted purple bags.
|
||||
drab plum bags contain 4 mirrored tomato bags, 3 light lavender bags, 3 mirrored green bags, 5 muted salmon bags.
|
||||
mirrored fuchsia bags contain 1 mirrored tomato bag, 5 dotted black bags, 2 posh white bags.
|
||||
pale crimson bags contain 4 light plum bags.
|
||||
dotted black bags contain 3 bright maroon bags.
|
||||
wavy tomato bags contain 1 dim black bag, 5 vibrant coral bags, 1 mirrored purple bag.
|
||||
bright aqua bags contain 5 pale lime bags, 3 striped teal bags.
|
||||
vibrant purple bags contain 2 clear turquoise bags, 4 vibrant bronze bags, 1 dark lime bag, 3 clear crimson bags.
|
||||
vibrant tan bags contain 4 posh black bags.
|
||||
plaid turquoise bags contain 2 dotted violet bags, 5 mirrored plum bags.
|
||||
dim violet bags contain 3 dotted orange bags.
|
||||
bright tan bags contain 2 dark indigo bags, 4 faded purple bags, 4 dim blue bags.
|
||||
muted chartreuse bags contain 4 dotted black bags, 5 mirrored tomato bags.
|
||||
muted gold bags contain 2 wavy gray bags, 4 clear gold bags, 1 shiny gold bag.
|
||||
dull indigo bags contain 3 mirrored maroon bags.
|
||||
clear aqua bags contain 4 dim plum bags, 5 bright bronze bags.
|
||||
muted maroon bags contain 1 striped crimson bag, 3 vibrant aqua bags.
|
||||
muted blue bags contain 4 clear magenta bags, 4 pale bronze bags, 2 dull black bags, 4 striped olive bags.
|
||||
drab aqua bags contain 3 faded crimson bags.
|
||||
shiny olive bags contain 4 shiny salmon bags, 2 wavy plum bags, 4 pale bronze bags, 3 posh gold bags.
|
||||
striped bronze bags contain 4 plaid olive bags, 4 plaid indigo bags, 1 pale white bag, 3 striped magenta bags.
|
||||
mirrored gold bags contain 2 faded lavender bags.
|
||||
faded blue bags contain 1 plaid bronze bag, 3 dim olive bags, 2 wavy crimson bags, 4 plaid silver bags.
|
||||
plaid lime bags contain 2 dim yellow bags.
|
||||
mirrored brown bags contain 4 light crimson bags.
|
||||
plaid red bags contain 5 shiny aqua bags, 5 wavy lavender bags, 1 posh beige bag.
|
||||
mirrored coral bags contain 4 mirrored lime bags, 5 muted orange bags, 5 dotted salmon bags, 1 faded purple bag.
|
||||
mirrored olive bags contain 2 vibrant blue bags.
|
||||
pale orange bags contain 4 wavy lime bags.
|
||||
drab maroon bags contain 1 shiny yellow bag, 3 dull yellow bags, 1 wavy lavender bag, 2 dim salmon bags.
|
||||
drab purple bags contain 5 bright tomato bags, 4 striped bronze bags, 2 bright chartreuse bags, 2 dark violet bags.
|
||||
striped lime bags contain 5 posh turquoise bags, 1 dim purple bag.
|
||||
wavy beige bags contain 5 shiny tomato bags, 3 drab lavender bags, 1 shiny orange bag.
|
||||
bright gold bags contain 5 vibrant red bags, 1 shiny orange bag, 3 striped bronze bags.
|
||||
muted magenta bags contain 4 light olive bags, 3 dotted tan bags.
|
||||
dark lime bags contain 5 wavy lavender bags, 4 clear maroon bags, 2 striped beige bags, 4 plaid salmon bags.
|
||||
pale silver bags contain 3 faded lavender bags, 2 dotted purple bags, 3 wavy crimson bags.
|
||||
posh turquoise bags contain 5 dim yellow bags, 4 posh lime bags, 5 shiny orange bags.
|
||||
shiny coral bags contain 2 dull tomato bags.
|
||||
dim tomato bags contain 3 shiny aqua bags, 3 light cyan bags.
|
||||
plaid tomato bags contain 3 faded indigo bags.
|
||||
clear tan bags contain 3 mirrored indigo bags.
|
||||
wavy maroon bags contain 1 dark silver bag.
|
||||
drab teal bags contain 5 muted salmon bags, 4 plaid yellow bags, 4 bright red bags, 2 posh teal bags.
|
||||
dim plum bags contain 5 posh salmon bags, 5 faded purple bags, 2 posh brown bags.
|
||||
bright fuchsia bags contain 2 dark beige bags, 3 faded yellow bags.
|
||||
clear silver bags contain 2 plaid tomato bags, 4 muted chartreuse bags.
|
||||
shiny purple bags contain 5 muted lavender bags, 2 clear turquoise bags, 4 muted teal bags.
|
||||
dark red bags contain 3 plaid plum bags, 2 dim indigo bags, 2 wavy gray bags.
|
||||
dark white bags contain 4 muted bronze bags, 5 mirrored gold bags, 3 plaid lavender bags.
|
||||
drab silver bags contain 1 dark gold bag, 3 muted white bags.
|
||||
dark green bags contain 3 posh turquoise bags.
|
||||
striped white bags contain 1 vibrant maroon bag, 1 shiny salmon bag.
|
||||
striped lavender bags contain 1 light tomato bag, 5 light lime bags, 1 posh gold bag.
|
||||
mirrored tan bags contain 2 posh fuchsia bags.
|
||||
pale salmon bags contain 4 shiny blue bags.
|
||||
dark black bags contain 1 dotted coral bag, 1 faded crimson bag, 4 drab violet bags, 5 clear chartreuse bags.
|
||||
vibrant red bags contain 1 dim gold bag, 2 dull yellow bags, 1 faded brown bag, 4 light cyan bags.
|
||||
pale turquoise bags contain 5 clear cyan bags.
|
||||
bright olive bags contain 1 clear turquoise bag, 4 bright teal bags, 3 striped maroon bags, 1 striped gold bag.
|
||||
shiny green bags contain 5 dim lime bags, 3 wavy brown bags, 2 faded magenta bags, 5 drab maroon bags.
|
||||
vibrant tomato bags contain 3 striped plum bags, 2 vibrant maroon bags, 4 muted silver bags, 3 striped chartreuse bags.
|
||||
vibrant yellow bags contain 3 pale beige bags, 4 dim orange bags, 4 dotted cyan bags.
|
||||
muted aqua bags contain 3 vibrant purple bags.
|
||||
dull orange bags contain 2 striped gray bags, 3 vibrant bronze bags, 2 bright turquoise bags.
|
||||
wavy cyan bags contain 2 drab maroon bags, 4 shiny aqua bags, 5 clear lime bags.
|
||||
faded tan bags contain 3 muted turquoise bags, 2 plaid purple bags, 3 clear crimson bags.
|
||||
light maroon bags contain 5 wavy chartreuse bags, 3 mirrored silver bags, 5 muted plum bags, 2 mirrored blue bags.
|
||||
shiny lavender bags contain 1 dark silver bag, 5 clear teal bags, 5 dark red bags, 4 faded red bags.
|
||||
striped fuchsia bags contain 4 clear gold bags, 3 bright magenta bags, 3 bright aqua bags.
|
||||
striped plum bags contain 4 bright lime bags, 5 dotted black bags, 5 drab beige bags.
|
||||
dotted red bags contain 4 dim gold bags, 3 dim indigo bags, 4 striped olive bags, 5 dim white bags.
|
||||
mirrored chartreuse bags contain 5 posh tomato bags.
|
||||
dim white bags contain 5 clear maroon bags.
|
||||
muted black bags contain 2 posh turquoise bags, 3 clear lavender bags, 2 shiny aqua bags, 2 pale red bags.
|
||||
muted silver bags contain 4 striped white bags, 5 dotted tomato bags, 4 mirrored fuchsia bags, 2 clear maroon bags.
|
||||
dotted lime bags contain 1 muted aqua bag, 3 mirrored tan bags.
|
||||
faded chartreuse bags contain 4 vibrant violet bags, 5 faded magenta bags, 5 dim teal bags, 2 dim green bags.
|
||||
light turquoise bags contain 1 dotted purple bag.
|
||||
plaid cyan bags contain 1 bright magenta bag, 2 wavy chartreuse bags, 5 vibrant silver bags, 3 pale crimson bags.
|
||||
dull maroon bags contain 5 dim black bags.
|
||||
wavy violet bags contain 1 faded yellow bag.
|
||||
vibrant teal bags contain 5 dim lime bags, 2 vibrant gold bags, 2 dim beige bags.
|
||||
pale fuchsia bags contain 3 striped olive bags.
|
||||
light brown bags contain 3 shiny chartreuse bags, 2 wavy purple bags.
|
||||
dull green bags contain 3 striped orange bags, 2 posh indigo bags, 3 faded blue bags.
|
||||
dark blue bags contain 5 striped magenta bags, 3 striped gray bags, 4 pale coral bags.
|
||||
mirrored lavender bags contain 3 posh black bags.
|
||||
shiny brown bags contain 5 dotted magenta bags, 4 dim chartreuse bags, 1 posh cyan bag.
|
||||
muted brown bags contain 3 dull black bags, 3 pale maroon bags, 5 posh brown bags, 2 striped gray bags.
|
||||
faded orange bags contain 1 dark orange bag.
|
||||
muted fuchsia bags contain 3 plaid salmon bags.
|
||||
clear plum bags contain 3 shiny red bags, 4 dim silver bags.
|
||||
bright coral bags contain 4 pale yellow bags, 2 muted magenta bags, 2 bright chartreuse bags, 3 light olive bags.
|
||||
muted coral bags contain 4 striped green bags.
|
||||
drab olive bags contain 3 shiny salmon bags, 4 clear cyan bags.
|
||||
dim silver bags contain 2 shiny plum bags.
|
||||
wavy plum bags contain 3 mirrored fuchsia bags, 5 pale maroon bags, 5 posh salmon bags.
|
||||
plaid coral bags contain 1 mirrored gold bag.
|
||||
posh beige bags contain 3 mirrored maroon bags, 3 drab chartreuse bags, 3 dark salmon bags, 1 clear green bag.
|
||||
drab green bags contain 1 bright teal bag, 3 muted chartreuse bags.
|
||||
bright crimson bags contain 3 striped orange bags, 4 wavy plum bags.
|
||||
posh chartreuse bags contain 5 clear white bags, 3 light red bags.
|
||||
dim gray bags contain 1 mirrored fuchsia bag, 3 muted teal bags, 4 clear maroon bags, 5 striped white bags.
|
||||
striped brown bags contain 2 muted orange bags.
|
||||
dim tan bags contain 3 clear gold bags, 5 clear salmon bags, 2 dark chartreuse bags.
|
||||
striped magenta bags contain 2 plaid indigo bags, 5 drab lavender bags, 2 dotted fuchsia bags, 4 shiny aqua bags.
|
||||
dotted violet bags contain 3 dull tomato bags.
|
||||
dotted tan bags contain 1 dark orange bag, 2 drab blue bags.
|
||||
shiny beige bags contain 1 drab gold bag.
|
||||
light plum bags contain 5 plaid tomato bags, 5 wavy gray bags, 1 dull tomato bag.
|
||||
muted indigo bags contain 3 dim salmon bags.
|
||||
clear red bags contain 3 mirrored beige bags.
|
||||
mirrored silver bags contain 2 wavy plum bags, 4 vibrant magenta bags.
|
||||
dark lavender bags contain 2 wavy violet bags, 5 muted green bags, 2 dim purple bags.
|
||||
clear teal bags contain 4 wavy crimson bags.
|
||||
light purple bags contain 5 faded black bags.
|
||||
light salmon bags contain 3 vibrant beige bags, 3 striped white bags, 5 pale magenta bags, 5 muted blue bags.
|
||||
dull gray bags contain 5 dim lavender bags.
|
||||
posh aqua bags contain 1 light olive bag, 4 mirrored purple bags, 4 vibrant gold bags, 1 shiny aqua bag.
|
||||
pale chartreuse bags contain 5 faded indigo bags.
|
||||
striped cyan bags contain 1 shiny olive bag, 3 bright tomato bags, 1 faded beige bag.
|
||||
clear coral bags contain 5 clear violet bags, 1 plaid tomato bag.
|
||||
bright cyan bags contain 3 mirrored violet bags, 5 plaid magenta bags, 4 vibrant bronze bags.
|
||||
posh tomato bags contain 3 shiny aqua bags, 1 pale beige bag.
|
||||
bright lavender bags contain 4 clear beige bags, 2 faded lavender bags, 3 faded aqua bags, 5 pale purple bags.
|
||||
dotted teal bags contain 5 plaid salmon bags, 1 posh turquoise bag, 2 muted silver bags.
|
||||
clear tomato bags contain 5 bright indigo bags.
|
||||
dotted silver bags contain 2 mirrored indigo bags.
|
||||
plaid plum bags contain 4 light crimson bags.
|
||||
wavy magenta bags contain 2 posh indigo bags, 2 vibrant indigo bags.
|
||||
dull tomato bags contain 4 dull lime bags, 4 faded brown bags.
|
||||
vibrant black bags contain 5 light crimson bags, 5 pale lavender bags, 3 dull blue bags, 2 pale coral bags.
|
||||
pale bronze bags contain 3 vibrant violet bags.
|
||||
wavy lime bags contain 5 shiny yellow bags, 2 pale white bags, 1 clear gold bag, 5 mirrored chartreuse bags.
|
||||
striped gray bags contain 3 shiny tomato bags, 3 dull coral bags, 1 shiny aqua bag, 2 dark orange bags.
|
||||
faded crimson bags contain 4 pale white bags, 3 muted bronze bags, 2 posh blue bags, 3 bright coral bags.
|
||||
wavy orange bags contain 2 shiny indigo bags.
|
||||
dotted white bags contain 1 striped tan bag, 4 bright silver bags, 1 shiny fuchsia bag, 3 posh gray bags.
|
||||
posh bronze bags contain 4 muted silver bags, 1 light lavender bag.
|
||||
dotted magenta bags contain 5 clear fuchsia bags, 4 faded indigo bags, 3 dull turquoise bags, 4 muted orange bags.
|
||||
dull cyan bags contain 3 clear teal bags, 3 dim white bags, 3 dull tomato bags, 5 vibrant purple bags.
|
||||
clear gold bags contain 4 dim gold bags, 3 dull lime bags, 4 faded brown bags, 4 wavy gray bags.
|
||||
bright beige bags contain 3 dull cyan bags, 4 bright indigo bags, 2 dull lime bags.
|
||||
clear orange bags contain 5 shiny salmon bags.
|
||||
plaid silver bags contain 5 dotted purple bags, 1 dim maroon bag, 3 muted gold bags.
|
||||
shiny white bags contain 1 light brown bag, 1 mirrored lime bag.
|
||||
dark gray bags contain 5 shiny cyan bags, 2 drab tomato bags.
|
||||
drab white bags contain 4 shiny tomato bags, 3 shiny gold bags, 3 dull lime bags, 3 plaid orange bags.
|
||||
vibrant cyan bags contain 2 wavy purple bags, 4 light gold bags, 1 pale indigo bag, 2 striped fuchsia bags.
|
||||
shiny yellow bags contain 4 shiny aqua bags, 2 dim salmon bags, 3 posh tomato bags, 5 muted salmon bags.
|
||||
posh coral bags contain 2 striped gray bags, 4 dark orange bags, 5 posh magenta bags.
|
||||
clear salmon bags contain 4 posh yellow bags, 2 pale violet bags, 3 mirrored violet bags.
|
||||
posh olive bags contain 2 mirrored red bags, 3 faded gold bags.
|
||||
faded fuchsia bags contain 5 bright gold bags, 3 pale tomato bags, 2 dotted bronze bags, 1 mirrored green bag.
|
||||
striped maroon bags contain 4 posh maroon bags, 4 dim indigo bags, 5 shiny aqua bags, 4 posh lime bags.
|
||||
dark violet bags contain 5 plaid tomato bags, 3 bright lime bags, 4 light lavender bags, 4 dark brown bags.
|
||||
dim maroon bags contain 1 dark beige bag, 4 wavy gray bags, 5 shiny coral bags, 1 pale white bag.
|
||||
wavy crimson bags contain 1 light tan bag, 5 dark beige bags.
|
||||
plaid magenta bags contain 1 shiny turquoise bag, 1 dark lime bag, 5 dim salmon bags.
|
||||
clear indigo bags contain 4 muted maroon bags.
|
||||
clear olive bags contain 5 mirrored teal bags, 1 plaid lime bag, 3 dull magenta bags, 5 wavy gray bags.
|
||||
mirrored white bags contain 3 pale gold bags.
|
||||
wavy blue bags contain 1 dotted aqua bag, 5 dark green bags.
|
||||
faded cyan bags contain 4 wavy gray bags, 5 vibrant bronze bags, 1 mirrored olive bag, 3 drab blue bags.
|
||||
faded gray bags contain 2 drab brown bags, 4 dotted coral bags, 5 dim turquoise bags, 1 mirrored maroon bag.
|
||||
dim coral bags contain 5 shiny olive bags, 3 light plum bags.
|
||||
vibrant fuchsia bags contain 5 shiny chartreuse bags, 5 wavy bronze bags, 2 bright red bags.
|
||||
dotted tomato bags contain 5 faded indigo bags, 3 vibrant maroon bags, 4 shiny coral bags.
|
||||
faded salmon bags contain 3 dull silver bags, 2 wavy bronze bags, 2 drab teal bags.
|
||||
vibrant orange bags contain 1 dotted beige bag.
|
||||
muted violet bags contain 5 posh lime bags.
|
||||
striped tan bags contain 3 muted lime bags.
|
||||
drab violet bags contain 3 vibrant chartreuse bags, 5 posh turquoise bags, 1 bright cyan bag.
|
||||
bright purple bags contain 2 vibrant bronze bags, 3 wavy beige bags, 2 plaid bronze bags.
|
||||
vibrant maroon bags contain no other bags.
|
||||
muted teal bags contain 2 bright turquoise bags.
|
||||
bright plum bags contain 5 dark gold bags, 2 shiny turquoise bags, 1 dull yellow bag.
|
||||
shiny crimson bags contain 3 wavy magenta bags.
|
||||
wavy teal bags contain 5 faded indigo bags, 4 dotted gray bags, 3 pale chartreuse bags, 3 vibrant coral bags.
|
||||
shiny blue bags contain 2 shiny salmon bags, 4 light tan bags, 1 dim salmon bag.
|
||||
mirrored maroon bags contain 1 drab fuchsia bag, 3 dotted green bags, 3 muted white bags.
|
||||
clear maroon bags contain 2 vibrant red bags, 5 bright maroon bags, 4 light olive bags.
|
||||
bright salmon bags contain 1 dotted red bag, 4 vibrant beige bags, 3 dark maroon bags, 3 clear lavender bags.
|
||||
pale gold bags contain 3 plaid olive bags.
|
||||
faded lime bags contain 3 faded maroon bags, 5 mirrored aqua bags.
|
||||
faded magenta bags contain 4 plaid orange bags, 5 vibrant violet bags, 1 dotted green bag, 3 wavy crimson bags.
|
||||
wavy aqua bags contain 5 drab yellow bags, 5 posh bronze bags.
|
||||
faded brown bags contain 3 mirrored green bags, 5 dim salmon bags, 4 vibrant blue bags, 1 wavy gray bag.
|
||||
dark purple bags contain 4 pale beige bags, 3 drab lavender bags.
|
||||
dull lime bags contain no other bags.
|
||||
light orange bags contain 1 vibrant white bag, 1 striped magenta bag.
|
||||
mirrored plum bags contain 1 clear green bag, 4 faded blue bags.
|
||||
vibrant brown bags contain 4 dark crimson bags, 5 light plum bags.
|
||||
shiny turquoise bags contain 1 dark lime bag.
|
||||
dark plum bags contain 2 wavy coral bags, 2 striped gray bags, 4 muted blue bags, 2 dull aqua bags.
|
||||
shiny red bags contain 1 plaid gray bag, 4 wavy beige bags, 5 dark red bags.
|
||||
posh violet bags contain 5 striped chartreuse bags, 2 pale maroon bags, 1 dull lime bag.
|
||||
light silver bags contain 2 clear silver bags, 1 dark indigo bag, 2 dim salmon bags, 2 drab salmon bags.
|
||||
plaid orange bags contain 4 dim gold bags, 2 bright magenta bags, 4 drab lavender bags.
|
||||
vibrant silver bags contain 5 posh plum bags, 3 vibrant aqua bags, 2 light lavender bags.
|
||||
faded tomato bags contain 1 pale coral bag, 2 posh gold bags.
|
||||
shiny silver bags contain 4 faded orange bags, 1 striped white bag, 2 faded turquoise bags, 5 striped gray bags.
|
||||
plaid purple bags contain 2 posh olive bags, 3 pale maroon bags, 3 pale gold bags, 1 faded white bag.
|
||||
light tomato bags contain 2 vibrant indigo bags, 4 dark orange bags, 5 muted bronze bags, 4 plaid tomato bags.
|
||||
dull aqua bags contain 5 bright lime bags.
|
||||
drab red bags contain 5 posh teal bags.
|
||||
dotted gray bags contain 2 vibrant salmon bags, 4 mirrored chartreuse bags, 1 dotted tomato bag, 4 posh magenta bags.
|
||||
dull bronze bags contain 3 mirrored brown bags.
|
||||
shiny aqua bags contain no other bags.
|
||||
dim gold bags contain no other bags.
|
||||
pale blue bags contain 4 posh gray bags.
|
||||
faded purple bags contain 5 shiny blue bags, 5 plaid salmon bags, 4 pale tomato bags, 2 dark gold bags.
|
||||
striped teal bags contain 4 mirrored green bags.
|
||||
shiny orange bags contain 4 faded lavender bags, 2 muted salmon bags, 2 dim indigo bags.
|
||||
wavy yellow bags contain 5 clear silver bags, 2 shiny brown bags.
|
||||
vibrant turquoise bags contain 1 vibrant magenta bag, 4 dull fuchsia bags, 5 mirrored green bags.
|
||||
dark teal bags contain 5 dim tomato bags.
|
||||
posh brown bags contain 3 dark orange bags.
|
||||
vibrant gray bags contain 2 dark beige bags, 2 wavy teal bags, 3 light purple bags.
|
||||
drab black bags contain 1 mirrored maroon bag, 3 pale silver bags, 3 dark brown bags, 1 shiny gray bag.
|
||||
light blue bags contain 2 dim olive bags, 2 striped magenta bags.
|
||||
muted turquoise bags contain 3 dim lime bags, 3 shiny coral bags.
|
||||
faded red bags contain 5 clear gray bags.
|
||||
bright chartreuse bags contain 4 plaid teal bags, 5 drab salmon bags, 5 wavy cyan bags.
|
||||
light magenta bags contain 5 light aqua bags, 4 light crimson bags, 3 dark yellow bags, 1 light tomato bag.
|
||||
striped coral bags contain 3 mirrored white bags.
|
||||
shiny maroon bags contain 1 vibrant red bag, 3 bright red bags.
|
||||
striped yellow bags contain 1 bright orange bag, 2 faded plum bags, 3 light olive bags, 3 shiny aqua bags.
|
||||
dull olive bags contain 2 posh fuchsia bags, 2 dull coral bags, 2 faded red bags.
|
||||
dotted yellow bags contain 1 drab salmon bag, 3 pale fuchsia bags.
|
||||
light bronze bags contain 3 drab cyan bags, 5 mirrored orange bags, 4 plaid crimson bags.
|
||||
shiny chartreuse bags contain 1 wavy cyan bag, 4 shiny tomato bags.
|
||||
dull yellow bags contain no other bags.
|
||||
faded plum bags contain 5 vibrant blue bags, 5 clear indigo bags, 5 posh teal bags, 4 posh plum bags.
|
||||
wavy salmon bags contain 4 striped teal bags, 3 wavy tan bags, 1 clear white bag.
|
||||
posh salmon bags contain 4 dull chartreuse bags, 4 shiny yellow bags, 2 dotted black bags, 3 clear lime bags.
|
||||
dull white bags contain 2 dim olive bags, 4 vibrant bronze bags, 4 faded cyan bags.
|
||||
shiny gold bags contain 5 bright maroon bags, 5 shiny aqua bags, 2 clear lime bags, 2 muted white bags.
|
||||
posh plum bags contain 4 posh purple bags, 2 wavy beige bags, 5 plaid plum bags.
|
||||
shiny magenta bags contain 4 shiny tan bags, 2 dull green bags, 3 mirrored purple bags.
|
||||
wavy olive bags contain 4 vibrant olive bags, 2 clear fuchsia bags, 1 light plum bag, 2 dark violet bags.
|
||||
muted lime bags contain 4 posh white bags, 4 shiny tomato bags.
|
||||
light indigo bags contain 2 clear turquoise bags, 3 vibrant black bags, 3 striped lime bags.
|
||||
muted yellow bags contain 3 mirrored tomato bags.
|
||||
faded beige bags contain 5 clear red bags, 3 dull brown bags, 4 dark red bags, 1 vibrant magenta bag.
|
||||
striped turquoise bags contain 2 bright aqua bags, 5 dim cyan bags, 1 pale lavender bag.
|
||||
pale beige bags contain no other bags.
|
||||
dull silver bags contain 3 bright lime bags, 2 pale tomato bags, 3 mirrored green bags.
|
||||
clear cyan bags contain 1 vibrant blue bag, 2 faded cyan bags, 1 faded brown bag.
|
||||
posh green bags contain 2 vibrant gray bags, 1 pale magenta bag.
|
||||
muted beige bags contain 2 drab blue bags, 3 vibrant magenta bags, 5 pale tomato bags.
|
||||
bright silver bags contain 4 dull brown bags, 4 vibrant violet bags, 4 dim violet bags.
|
||||
mirrored bronze bags contain 2 bright indigo bags, 3 shiny coral bags.
|
||||
dull red bags contain 4 dull plum bags, 1 striped black bag, 1 dim teal bag, 4 dim white bags.
|
||||
dim chartreuse bags contain 3 drab maroon bags.
|
||||
drab crimson bags contain 5 dull turquoise bags, 3 posh gold bags, 4 bright gold bags, 2 muted indigo bags.
|
||||
wavy brown bags contain 1 muted white bag.
|
||||
plaid violet bags contain 2 faded tomato bags.
|
||||
muted salmon bags contain 1 light cyan bag, 1 vibrant blue bag.
|
||||
mirrored salmon bags contain 1 dotted green bag, 2 plaid salmon bags.
|
||||
posh lime bags contain 1 vibrant blue bag.
|
||||
shiny tan bags contain 2 bright red bags, 1 dim maroon bag, 3 vibrant salmon bags.
|
||||
vibrant aqua bags contain 5 shiny orange bags, 2 dull coral bags, 4 vibrant bronze bags, 5 dark indigo bags.
|
||||
posh magenta bags contain 5 dim maroon bags, 2 wavy indigo bags.
|
||||
posh red bags contain 4 dull black bags, 2 shiny tomato bags, 4 faded beige bags.
|
||||
mirrored indigo bags contain 4 faded magenta bags, 1 light red bag, 3 muted gray bags, 2 plaid lavender bags.
|
||||
drab indigo bags contain 4 dull tan bags, 2 dark coral bags.
|
||||
vibrant lavender bags contain 5 posh turquoise bags, 4 posh bronze bags, 5 light tomato bags.
|
||||
mirrored blue bags contain 1 striped bronze bag, 4 plaid salmon bags, 3 posh lime bags, 4 mirrored green bags.
|
||||
plaid blue bags contain 4 bright violet bags, 5 clear red bags.
|
||||
dark tan bags contain 3 faded chartreuse bags, 1 posh gold bag, 5 light chartreuse bags.
|
||||
bright teal bags contain 3 pale yellow bags, 1 vibrant white bag, 3 shiny salmon bags, 1 plaid indigo bag.
|
||||
dark gold bags contain 1 mirrored green bag.
|
||||
plaid beige bags contain 5 dim cyan bags.
|
||||
pale plum bags contain 4 striped olive bags, 1 mirrored violet bag.
|
||||
drab orange bags contain 1 plaid cyan bag, 2 vibrant green bags, 4 striped crimson bags, 2 posh teal bags.
|
||||
faded teal bags contain 4 muted salmon bags, 1 dim tomato bag, 5 clear white bags.
|
||||
posh cyan bags contain 3 shiny gray bags, 2 posh indigo bags.
|
||||
plaid tan bags contain 4 plaid silver bags, 2 dark beige bags, 3 plaid salmon bags, 5 light beige bags.
|
||||
muted olive bags contain 5 vibrant salmon bags, 2 dull orange bags.
|
||||
muted tan bags contain 5 wavy gold bags, 2 striped orange bags, 4 plaid lavender bags.
|
||||
posh tan bags contain 3 shiny lavender bags, 5 vibrant red bags, 4 light bronze bags.
|
||||
bright tomato bags contain 3 dull lime bags, 3 wavy gray bags.
|
||||
dark turquoise bags contain 3 vibrant coral bags, 4 wavy beige bags.
|
||||
faded indigo bags contain 4 wavy gray bags.
|
||||
clear blue bags contain 2 pale yellow bags.
|
||||
light gold bags contain 5 light olive bags, 4 clear white bags, 3 plaid silver bags, 2 bright maroon bags.
|
||||
light lavender bags contain 2 dotted black bags, 4 plaid tomato bags, 4 dark orange bags, 5 shiny blue bags.
|
||||
faded coral bags contain 5 pale gold bags, 4 dull black bags.
|
||||
vibrant salmon bags contain 2 faded teal bags, 4 drab lavender bags, 5 clear teal bags, 1 dim olive bag.
|
||||
muted orange bags contain 1 posh salmon bag, 2 light cyan bags, 5 shiny tomato bags, 4 dim olive bags.
|
||||
clear black bags contain 3 wavy bronze bags, 4 wavy lime bags, 4 shiny black bags.
|
||||
pale violet bags contain 1 faded violet bag, 3 pale chartreuse bags, 5 drab blue bags.
|
||||
dotted plum bags contain 2 muted chartreuse bags, 3 vibrant turquoise bags, 5 posh brown bags.
|
||||
plaid maroon bags contain 1 posh coral bag, 1 dull fuchsia bag.
|
||||
dotted brown bags contain 1 posh lime bag, 5 dull turquoise bags.
|
||||
pale green bags contain 3 drab magenta bags, 4 dim salmon bags, 1 vibrant chartreuse bag.
|
||||
dark tomato bags contain 2 clear indigo bags, 1 light plum bag, 2 dull turquoise bags.
|
||||
striped silver bags contain 5 dark red bags, 4 faded purple bags.
|
||||
shiny fuchsia bags contain 2 dark gold bags, 3 dull tomato bags.
|
||||
mirrored aqua bags contain 5 dark bronze bags.
|
||||
dim beige bags contain 5 dull white bags.
|
||||
dark chartreuse bags contain 4 light crimson bags, 3 dim salmon bags, 2 dark orange bags.
|
||||
plaid chartreuse bags contain 4 drab blue bags.
|
||||
dim green bags contain 4 muted bronze bags, 1 shiny indigo bag.
|
||||
mirrored crimson bags contain 5 wavy fuchsia bags, 2 vibrant magenta bags.
|
||||
clear yellow bags contain 3 plaid bronze bags, 1 light tan bag.
|
||||
bright turquoise bags contain 3 shiny salmon bags.
|
||||
drab brown bags contain 1 vibrant fuchsia bag.
|
||||
dim bronze bags contain 2 dim aqua bags, 4 dim beige bags.
|
||||
dim black bags contain 1 posh purple bag, 4 mirrored bronze bags, 5 posh plum bags.
|
||||
plaid gold bags contain 4 posh silver bags, 5 light turquoise bags, 3 vibrant black bags.
|
||||
drab lime bags contain 1 muted gold bag, 4 dotted red bags.
|
||||
bright red bags contain 1 dull yellow bag, 4 mirrored gold bags.
|
||||
vibrant white bags contain 2 dull lime bags, 2 faded indigo bags, 1 faded brown bag, 1 muted salmon bag.
|
||||
drab fuchsia bags contain 3 pale beige bags, 3 dark orange bags.
|
||||
striped tomato bags contain 1 dark lime bag, 5 dull coral bags.
|
||||
faded green bags contain 2 wavy blue bags.
|
||||
vibrant olive bags contain 3 bright tomato bags, 4 wavy beige bags.
|
||||
dark coral bags contain 5 faded teal bags, 1 mirrored tomato bag, 3 dark orange bags, 5 plaid lime bags.
|
||||
bright violet bags contain 4 dark lime bags.
|
||||
wavy tan bags contain 4 light tan bags, 3 vibrant red bags, 2 mirrored olive bags.
|
||||
dotted beige bags contain 5 striped gray bags, 4 posh plum bags, 1 bright turquoise bag, 4 striped fuchsia bags.
|
||||
dotted turquoise bags contain 3 mirrored green bags, 4 posh gold bags, 5 drab plum bags.
|
||||
striped beige bags contain 1 clear gold bag, 1 vibrant white bag, 3 faded cyan bags, 2 shiny gold bags.
|
||||
posh silver bags contain 2 vibrant gold bags, 2 mirrored violet bags.
|
||||
mirrored purple bags contain 2 dim yellow bags, 2 dull tomato bags.
|
||||
shiny lime bags contain 4 clear olive bags, 4 mirrored silver bags, 1 muted tomato bag.
|
||||
muted cyan bags contain 1 posh coral bag, 5 drab blue bags, 4 wavy lavender bags.
|
||||
light aqua bags contain 1 dark orange bag.
|
||||
shiny cyan bags contain 2 dark maroon bags, 5 shiny salmon bags, 5 muted salmon bags, 2 wavy bronze bags.
|
||||
posh white bags contain 1 posh fuchsia bag.
|
||||
vibrant plum bags contain 4 light crimson bags.
|
||||
dotted blue bags contain 1 shiny tan bag, 3 light plum bags, 5 dotted gray bags.
|
||||
posh maroon bags contain 5 mirrored violet bags.
|
||||
dull violet bags contain 1 faded teal bag, 2 wavy cyan bags, 3 dull silver bags, 3 vibrant red bags.
|
||||
posh gold bags contain 4 muted salmon bags, 4 dull plum bags, 3 muted bronze bags.
|
||||
dim orange bags contain 2 dull coral bags.
|
||||
dim aqua bags contain 1 drab maroon bag.
|
||||
striped salmon bags contain 4 muted white bags.
|
||||
dark cyan bags contain 3 plaid maroon bags.
|
||||
wavy red bags contain 2 wavy maroon bags, 2 vibrant chartreuse bags, 5 wavy salmon bags.
|
||||
light yellow bags contain 4 posh lime bags, 1 light white bag.
|
||||
striped blue bags contain 5 plaid magenta bags, 5 vibrant gold bags.
|
||||
dark olive bags contain 4 dim maroon bags, 2 shiny tan bags, 5 wavy green bags.
|
||||
vibrant gold bags contain 1 dull beige bag, 4 posh turquoise bags.
|
||||
muted white bags contain 1 dim indigo bag, 5 dull lime bags, 5 shiny aqua bags.
|
||||
light violet bags contain 5 wavy bronze bags.
|
||||
pale olive bags contain 1 dim gold bag, 2 shiny coral bags.
|
||||
light gray bags contain 3 bright gold bags.
|
||||
dim indigo bags contain 3 posh tomato bags, 5 pale tomato bags, 4 shiny aqua bags.
|
||||
pale indigo bags contain 4 pale bronze bags, 5 light chartreuse bags.
|
||||
muted red bags contain 3 clear white bags, 4 dull lavender bags, 5 muted purple bags.
|
||||
plaid olive bags contain 3 dark orange bags, 3 dim gold bags.
|
||||
dotted maroon bags contain 3 faded purple bags, 5 light green bags.
|
||||
bright orange bags contain 1 shiny black bag, 2 dim lavender bags, 1 shiny olive bag.
|
||||
wavy chartreuse bags contain 3 clear lime bags, 4 pale maroon bags.
|
||||
mirrored turquoise bags contain 2 striped crimson bags, 4 vibrant bronze bags, 5 dotted lavender bags, 2 clear silver bags.
|
||||
dull purple bags contain 4 posh crimson bags.
|
||||
faded bronze bags contain 1 clear fuchsia bag, 2 light fuchsia bags, 2 pale chartreuse bags.
|
||||
clear bronze bags contain 3 pale chartreuse bags, 5 dull tan bags, 1 vibrant tan bag.
|
||||
vibrant magenta bags contain 4 shiny fuchsia bags, 2 shiny coral bags, 3 faded indigo bags, 4 pale tomato bags.
|
||||
striped chartreuse bags contain 2 shiny orange bags, 3 mirrored tomato bags, 1 clear lime bag.
|
||||
dotted green bags contain 1 pale beige bag, 2 mirrored bronze bags, 2 wavy crimson bags.
|
||||
wavy white bags contain 3 posh magenta bags, 3 muted yellow bags, 3 wavy crimson bags, 4 vibrant olive bags.
|
||||
muted plum bags contain 4 wavy gold bags.
|
||||
faded violet bags contain 3 dark violet bags.
|
||||
dull fuchsia bags contain 4 plaid indigo bags, 1 mirrored brown bag, 5 clear lime bags.
|
||||
bright green bags contain 3 mirrored white bags, 5 dotted silver bags.
|
||||
shiny violet bags contain 4 striped salmon bags.
|
||||
dim fuchsia bags contain 3 striped red bags.
|
||||
faded lavender bags contain 3 wavy tan bags, 2 clear lime bags.
|
||||
dim cyan bags contain 4 drab white bags.
|
||||
dark brown bags contain 5 clear gold bags, 3 vibrant blue bags.
|
||||
clear lavender bags contain 5 striped turquoise bags, 1 light crimson bag, 5 light tan bags, 2 muted gold bags.
|
||||
light green bags contain 3 striped silver bags, 4 bright silver bags, 2 light crimson bags.
|
||||
pale lavender bags contain 5 clear violet bags.
|
||||
dotted orange bags contain 3 dotted tomato bags, 2 dull plum bags, 5 posh purple bags, 2 drab turquoise bags.
|
||||
bright black bags contain 3 posh chartreuse bags, 5 wavy indigo bags, 5 dull crimson bags, 2 clear turquoise bags.
|
||||
dotted gold bags contain 5 striped white bags, 2 striped brown bags, 3 mirrored green bags, 3 dark violet bags.
|
||||
plaid brown bags contain 3 striped chartreuse bags, 3 striped black bags, 2 bright chartreuse bags.
|
||||
wavy coral bags contain 3 dim turquoise bags, 4 dim lime bags.
|
||||
pale brown bags contain 4 dim white bags, 5 bright fuchsia bags, 2 clear orange bags.
|
||||
mirrored teal bags contain 4 pale lavender bags, 5 vibrant maroon bags, 4 striped gray bags, 4 vibrant indigo bags.
|
||||
posh orange bags contain 5 posh magenta bags, 4 posh violet bags, 2 plaid magenta bags, 4 muted cyan bags.
|
||||
dim crimson bags contain 3 drab violet bags, 1 dotted aqua bag.
|
||||
muted gray bags contain 4 vibrant lime bags, 1 dark maroon bag, 2 clear gold bags, 3 plaid gray bags.
|
||||
clear brown bags contain 5 shiny tomato bags, 4 striped tan bags, 5 vibrant lavender bags, 1 pale white bag.
|
||||
posh crimson bags contain 3 dim yellow bags, 4 shiny turquoise bags, 2 vibrant purple bags, 4 mirrored aqua bags.
|
||||
plaid black bags contain 2 shiny tan bags, 1 pale olive bag, 2 wavy tan bags, 1 clear red bag.
|
||||
dark crimson bags contain 3 drab fuchsia bags, 5 faded gold bags.
|
||||
pale tan bags contain 5 posh black bags.
|
||||
wavy bronze bags contain 1 clear lime bag.
|
||||
wavy gold bags contain 2 dull lavender bags, 1 bright turquoise bag, 4 striped brown bags, 5 drab turquoise bags.
|
||||
pale lime bags contain 2 faded cyan bags, 4 muted salmon bags, 4 shiny coral bags, 3 mirrored green bags.
|
||||
dark magenta bags contain 4 faded chartreuse bags, 1 muted brown bag, 4 vibrant salmon bags, 2 dim indigo bags.
|
||||
striped purple bags contain 3 mirrored olive bags.
|
||||
dull crimson bags contain 2 clear orange bags.
|
||||
dull beige bags contain 1 drab turquoise bag, 1 dark indigo bag, 1 dull white bag.
|
||||
dotted aqua bags contain 4 dull chartreuse bags.
|
||||
clear purple bags contain 2 muted beige bags, 3 dull black bags.
|
||||
light crimson bags contain 1 faded brown bag, 1 vibrant red bag, 4 wavy lavender bags, 1 wavy gray bag.
|
||||
clear fuchsia bags contain 1 dark maroon bag, 3 muted salmon bags.
|
||||
muted crimson bags contain 5 light lime bags, 4 posh plum bags, 5 clear fuchsia bags, 1 wavy turquoise bag.
|
||||
muted purple bags contain 3 dull gray bags, 5 posh gray bags.
|
||||
shiny salmon bags contain 5 faded brown bags, 4 clear chartreuse bags.
|
||||
plaid lavender bags contain 1 dim lime bag.
|
||||
vibrant indigo bags contain 5 dim tomato bags, 2 striped beige bags, 2 mirrored olive bags.
|
||||
mirrored cyan bags contain 3 plaid coral bags, 5 faded teal bags, 5 pale indigo bags, 3 bright fuchsia bags.
|
||||
dim yellow bags contain 5 light crimson bags, 1 pale tomato bag.
|
||||
dotted chartreuse bags contain 3 shiny blue bags.
|
||||
light beige bags contain 3 bright teal bags, 1 pale tomato bag, 2 light blue bags.
|
||||
dotted olive bags contain 3 bright indigo bags, 4 muted fuchsia bags.
|
||||
pale white bags contain 1 vibrant maroon bag, 2 pale tomato bags, 2 bright magenta bags.
|
||||
mirrored yellow bags contain 2 drab brown bags, 3 striped salmon bags, 4 clear olive bags, 1 dotted black bag.
|
||||
light olive bags contain 2 bright magenta bags.
|
||||
muted tomato bags contain 4 shiny lavender bags.
|
||||
light chartreuse bags contain 5 light plum bags, 4 light olive bags, 3 dark indigo bags.
|
||||
posh purple bags contain 2 wavy crimson bags.
|
||||
bright maroon bags contain 4 faded indigo bags.
|
||||
dull blue bags contain 3 dark brown bags, 3 dim indigo bags, 5 pale silver bags, 1 mirrored brown bag.
|
||||
light coral bags contain 5 clear teal bags.
|
||||
bright gray bags contain 3 muted black bags, 3 vibrant cyan bags.
|
||||
posh fuchsia bags contain 3 clear gold bags, 1 dim salmon bag, 2 shiny salmon bags.
|
||||
light white bags contain 3 dim cyan bags, 5 clear crimson bags, 3 dull fuchsia bags.
|
||||
light teal bags contain 3 shiny fuchsia bags, 2 muted white bags, 3 shiny black bags.
|
||||
plaid salmon bags contain 2 dotted black bags, 2 dark beige bags, 1 shiny coral bag.
|
||||
wavy black bags contain 5 posh olive bags.
|
||||
drab gray bags contain 3 mirrored tomato bags, 3 light crimson bags.
|
||||
dim olive bags contain 5 clear chartreuse bags.
|
||||
bright white bags contain 2 mirrored tan bags, 1 pale green bag, 5 dull magenta bags, 5 plaid lime bags.
|
||||
striped olive bags contain 3 muted gold bags.
|
||||
faded olive bags contain 1 muted indigo bag.
|
||||
pale yellow bags contain 5 light olive bags, 5 plaid aqua bags, 1 clear white bag, 5 faded purple bags.
|
||||
dull coral bags contain 4 light crimson bags, 5 shiny aqua bags, 5 wavy cyan bags, 3 dark beige bags.
|
||||
vibrant beige bags contain 4 striped olive bags, 5 clear gold bags.
|
||||
dark fuchsia bags contain 1 pale teal bag, 4 dull gray bags.
|
||||
drab tomato bags contain 4 mirrored white bags.
|
||||
clear crimson bags contain 4 pale tomato bags, 3 wavy gray bags, 4 drab blue bags, 1 mirrored olive bag.
|
||||
dotted crimson bags contain 1 plaid crimson bag, 1 dark crimson bag, 1 striped beige bag, 4 pale fuchsia bags.
|
||||
striped black bags contain 4 muted maroon bags.
|
||||
shiny bronze bags contain 1 dotted tan bag, 1 vibrant beige bag, 5 faded tomato bags.
|
||||
light cyan bags contain no other bags.
|
||||
posh black bags contain 2 dim green bags.
|
||||
striped gold bags contain 3 drab tan bags.
|
||||
faded white bags contain 4 pale coral bags.
|
||||
drab tan bags contain 4 clear gold bags, 5 drab silver bags.
|
||||
light tan bags contain 2 dull lime bags, 1 muted salmon bag, 4 pale beige bags.
|
||||
plaid indigo bags contain 3 plaid salmon bags, 1 vibrant maroon bag.
|
||||
faded gold bags contain 3 dark coral bags.
|
||||
dark salmon bags contain 5 bright gold bags, 1 pale white bag.
|
||||
plaid bronze bags contain 3 drab gold bags, 4 dotted black bags.
|
||||
shiny black bags contain 3 bright magenta bags, 2 dark indigo bags, 1 posh plum bag, 5 drab gold bags.
|
||||
pale magenta bags contain 1 clear gold bag, 5 posh fuchsia bags, 2 faded cyan bags.
|
49
day8/day8.py
49
day8/day8.py
@ -1,49 +0,0 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
|
||||
def part1(instructions):
|
||||
instruction_pointer = 0
|
||||
accumulator = 0
|
||||
visited_instructions = set()
|
||||
while instruction_pointer not in visited_instructions: # return before executing any instruction a second time
|
||||
if instruction_pointer >= len(instructions): # stop the program when ip is out of bounds
|
||||
break
|
||||
visited_instructions.add(instruction_pointer)
|
||||
instruction, argument = instructions[instruction_pointer].split(" ")
|
||||
if instruction == "acc":
|
||||
accumulator += int(argument)
|
||||
instruction_pointer += 1
|
||||
elif instruction == "jmp":
|
||||
value = int(argument)
|
||||
instruction_pointer += value
|
||||
else:
|
||||
instruction_pointer += 1
|
||||
return instruction_pointer, accumulator
|
||||
|
||||
|
||||
def part2(instructions):
|
||||
for index, line in enumerate(instructions):
|
||||
permutation = generate_permutation(instructions, line, index)
|
||||
if permutation is None:
|
||||
continue
|
||||
instruction_pointer, accumulator = part1(permutation)
|
||||
if instruction_pointer == len(permutation):
|
||||
return accumulator
|
||||
|
||||
|
||||
def generate_permutation(instructions, line, index):
|
||||
permutation = instructions[:]
|
||||
instruction, arg = line.split(" ")
|
||||
if instruction == "acc": # don't replace acc operations
|
||||
return
|
||||
elif instruction == "nop":
|
||||
permutation[index] = f"jmp {arg}"
|
||||
elif instruction == "jmp":
|
||||
permutation[index] = f"nop {arg}"
|
||||
return permutation
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
instructions = [line.rstrip() for line in open("input.txt")]
|
||||
print("Part 1 : (ip, acc) ", part1(instructions)[1])
|
||||
print("Part 2 : (ip, acc) ", part2(instructions))
|
608
day8/input.txt
608
day8/input.txt
@ -1,608 +0,0 @@
|
||||
jmp +232
|
||||
acc +21
|
||||
nop +120
|
||||
jmp +239
|
||||
acc +18
|
||||
acc +41
|
||||
jmp +72
|
||||
acc +47
|
||||
jmp +314
|
||||
jmp +1
|
||||
acc +47
|
||||
nop +175
|
||||
acc +33
|
||||
jmp +115
|
||||
nop -5
|
||||
acc +37
|
||||
acc +25
|
||||
acc +18
|
||||
jmp +304
|
||||
acc +0
|
||||
acc +16
|
||||
jmp +77
|
||||
acc +9
|
||||
acc -3
|
||||
jmp +93
|
||||
acc +16
|
||||
acc -15
|
||||
jmp +110
|
||||
jmp +76
|
||||
acc +36
|
||||
acc +11
|
||||
acc -3
|
||||
jmp +258
|
||||
jmp +241
|
||||
acc +42
|
||||
jmp +514
|
||||
nop +103
|
||||
acc +36
|
||||
acc -18
|
||||
jmp +47
|
||||
acc +5
|
||||
acc +37
|
||||
jmp +480
|
||||
acc -16
|
||||
jmp +1
|
||||
nop +498
|
||||
jmp +1
|
||||
jmp +12
|
||||
acc +0
|
||||
acc +35
|
||||
jmp +437
|
||||
jmp +326
|
||||
acc -15
|
||||
acc -7
|
||||
nop -2
|
||||
jmp +548
|
||||
jmp -4
|
||||
jmp +395
|
||||
jmp +258
|
||||
acc +37
|
||||
acc +17
|
||||
acc -18
|
||||
jmp +345
|
||||
acc -18
|
||||
acc +37
|
||||
acc +36
|
||||
jmp +217
|
||||
acc -4
|
||||
acc +39
|
||||
jmp -35
|
||||
jmp +252
|
||||
jmp +1
|
||||
nop +91
|
||||
jmp +402
|
||||
nop -40
|
||||
jmp +371
|
||||
jmp -72
|
||||
jmp +9
|
||||
acc +41
|
||||
jmp +95
|
||||
nop +252
|
||||
nop +30
|
||||
jmp +240
|
||||
nop +266
|
||||
jmp +462
|
||||
jmp +137
|
||||
acc -14
|
||||
jmp +203
|
||||
jmp +1
|
||||
acc +45
|
||||
acc -14
|
||||
acc -6
|
||||
jmp -9
|
||||
acc -15
|
||||
acc +6
|
||||
nop +298
|
||||
jmp -56
|
||||
jmp +14
|
||||
acc +32
|
||||
jmp +40
|
||||
acc +17
|
||||
nop +62
|
||||
acc +14
|
||||
jmp +119
|
||||
acc +49
|
||||
jmp -29
|
||||
acc +27
|
||||
acc -12
|
||||
acc +14
|
||||
acc +19
|
||||
jmp +253
|
||||
acc +19
|
||||
jmp +345
|
||||
acc -17
|
||||
acc +39
|
||||
jmp +1
|
||||
jmp +133
|
||||
jmp +268
|
||||
acc -14
|
||||
acc -16
|
||||
acc +45
|
||||
jmp +373
|
||||
jmp +116
|
||||
jmp +245
|
||||
acc -19
|
||||
acc +32
|
||||
jmp -22
|
||||
jmp +105
|
||||
acc -9
|
||||
acc +27
|
||||
acc +16
|
||||
nop +397
|
||||
jmp +110
|
||||
acc +13
|
||||
acc -10
|
||||
acc +10
|
||||
jmp -69
|
||||
jmp +29
|
||||
jmp +94
|
||||
acc +38
|
||||
acc +49
|
||||
acc +40
|
||||
jmp +261
|
||||
acc +43
|
||||
acc -13
|
||||
jmp +214
|
||||
acc -10
|
||||
nop -80
|
||||
acc +15
|
||||
jmp +228
|
||||
acc +0
|
||||
jmp +275
|
||||
jmp -69
|
||||
acc +46
|
||||
acc +4
|
||||
acc +24
|
||||
acc +6
|
||||
jmp +279
|
||||
acc -9
|
||||
nop +281
|
||||
jmp +286
|
||||
acc -4
|
||||
jmp +306
|
||||
jmp +342
|
||||
acc -14
|
||||
jmp +357
|
||||
acc -10
|
||||
nop -9
|
||||
acc +10
|
||||
acc +40
|
||||
jmp +427
|
||||
acc +0
|
||||
acc +32
|
||||
jmp +405
|
||||
acc +45
|
||||
acc +34
|
||||
nop +281
|
||||
acc +34
|
||||
jmp +394
|
||||
acc +41
|
||||
acc +20
|
||||
jmp -98
|
||||
jmp -60
|
||||
acc -3
|
||||
acc +17
|
||||
jmp +19
|
||||
acc +6
|
||||
nop +168
|
||||
acc +35
|
||||
jmp -141
|
||||
nop -62
|
||||
acc +8
|
||||
acc +16
|
||||
jmp +117
|
||||
acc +34
|
||||
acc -8
|
||||
acc +35
|
||||
acc -15
|
||||
jmp +85
|
||||
acc +2
|
||||
acc -9
|
||||
acc -4
|
||||
acc +49
|
||||
jmp +394
|
||||
nop -145
|
||||
acc +47
|
||||
jmp +16
|
||||
acc +10
|
||||
acc +0
|
||||
jmp +87
|
||||
nop -88
|
||||
acc -9
|
||||
acc -16
|
||||
acc +45
|
||||
jmp +374
|
||||
acc +28
|
||||
acc +38
|
||||
jmp -139
|
||||
acc -13
|
||||
acc +13
|
||||
jmp +143
|
||||
jmp -135
|
||||
jmp -4
|
||||
jmp -130
|
||||
acc +5
|
||||
nop -196
|
||||
jmp +48
|
||||
acc -10
|
||||
jmp +149
|
||||
acc -14
|
||||
jmp +210
|
||||
jmp +325
|
||||
acc +45
|
||||
acc +11
|
||||
acc -15
|
||||
jmp +97
|
||||
nop +107
|
||||
jmp -98
|
||||
acc -7
|
||||
acc -18
|
||||
jmp -181
|
||||
jmp +122
|
||||
acc -15
|
||||
jmp -49
|
||||
jmp +1
|
||||
acc +36
|
||||
acc -10
|
||||
jmp +1
|
||||
jmp +62
|
||||
acc +39
|
||||
jmp +105
|
||||
acc +19
|
||||
nop +253
|
||||
acc -11
|
||||
acc -9
|
||||
jmp +77
|
||||
acc +50
|
||||
acc +3
|
||||
acc -18
|
||||
acc +17
|
||||
jmp +56
|
||||
nop -209
|
||||
nop +272
|
||||
acc -13
|
||||
jmp +270
|
||||
nop +229
|
||||
acc +12
|
||||
jmp +1
|
||||
jmp -44
|
||||
acc -13
|
||||
jmp +1
|
||||
nop +275
|
||||
acc +45
|
||||
jmp -254
|
||||
acc -2
|
||||
acc -2
|
||||
nop -148
|
||||
jmp -91
|
||||
acc +2
|
||||
nop -30
|
||||
acc -8
|
||||
acc +0
|
||||
jmp -96
|
||||
nop +1
|
||||
jmp -74
|
||||
acc -19
|
||||
acc +10
|
||||
acc +26
|
||||
acc +30
|
||||
jmp -280
|
||||
acc +46
|
||||
acc -2
|
||||
acc -8
|
||||
jmp +277
|
||||
acc -9
|
||||
jmp +205
|
||||
acc -13
|
||||
acc +10
|
||||
jmp +1
|
||||
jmp +219
|
||||
acc +38
|
||||
acc +24
|
||||
acc +11
|
||||
jmp -129
|
||||
jmp -86
|
||||
jmp +1
|
||||
acc +0
|
||||
jmp +1
|
||||
acc +46
|
||||
jmp -135
|
||||
nop +218
|
||||
acc -14
|
||||
acc +0
|
||||
jmp +55
|
||||
acc +24
|
||||
jmp +213
|
||||
acc +19
|
||||
acc +16
|
||||
jmp -266
|
||||
acc +24
|
||||
acc +15
|
||||
jmp +158
|
||||
acc +3
|
||||
jmp -94
|
||||
acc +16
|
||||
acc +24
|
||||
acc +42
|
||||
jmp +201
|
||||
jmp -32
|
||||
acc +34
|
||||
nop -321
|
||||
jmp +212
|
||||
acc +12
|
||||
acc +41
|
||||
jmp -212
|
||||
acc +32
|
||||
jmp +236
|
||||
acc +45
|
||||
nop +253
|
||||
jmp +129
|
||||
nop -3
|
||||
acc +38
|
||||
jmp +35
|
||||
acc -15
|
||||
acc +21
|
||||
acc -7
|
||||
acc -6
|
||||
jmp +46
|
||||
jmp -5
|
||||
acc +5
|
||||
acc +4
|
||||
acc +42
|
||||
jmp +142
|
||||
acc +36
|
||||
jmp -180
|
||||
acc +23
|
||||
jmp -46
|
||||
acc +12
|
||||
jmp +5
|
||||
jmp +201
|
||||
acc +36
|
||||
acc -14
|
||||
jmp -30
|
||||
jmp -338
|
||||
acc +12
|
||||
acc +34
|
||||
acc +2
|
||||
jmp -310
|
||||
acc -15
|
||||
jmp -104
|
||||
jmp -148
|
||||
jmp +108
|
||||
acc +37
|
||||
acc -6
|
||||
acc +0
|
||||
acc +13
|
||||
jmp -324
|
||||
acc +49
|
||||
acc +37
|
||||
acc +37
|
||||
jmp +131
|
||||
acc +2
|
||||
acc +30
|
||||
acc +12
|
||||
jmp -238
|
||||
acc -12
|
||||
acc +4
|
||||
jmp -155
|
||||
acc +45
|
||||
acc -10
|
||||
nop -168
|
||||
nop +114
|
||||
jmp +113
|
||||
acc +15
|
||||
acc +41
|
||||
acc +6
|
||||
acc +34
|
||||
jmp +25
|
||||
acc +46
|
||||
acc +28
|
||||
acc +44
|
||||
acc -3
|
||||
jmp -70
|
||||
acc +2
|
||||
acc +37
|
||||
jmp -101
|
||||
jmp +51
|
||||
acc +45
|
||||
nop -399
|
||||
nop -60
|
||||
jmp -391
|
||||
acc +41
|
||||
jmp -57
|
||||
jmp -54
|
||||
acc +46
|
||||
jmp +90
|
||||
acc +6
|
||||
jmp +83
|
||||
acc +37
|
||||
jmp +1
|
||||
acc -6
|
||||
jmp -189
|
||||
acc +0
|
||||
jmp -241
|
||||
acc +35
|
||||
jmp -396
|
||||
acc +35
|
||||
acc +42
|
||||
acc +37
|
||||
acc +20
|
||||
jmp -81
|
||||
nop +74
|
||||
acc +41
|
||||
acc +23
|
||||
jmp +1
|
||||
jmp -349
|
||||
jmp -232
|
||||
acc +37
|
||||
acc +24
|
||||
jmp +121
|
||||
jmp -144
|
||||
acc +35
|
||||
acc +39
|
||||
acc -12
|
||||
acc +14
|
||||
jmp -113
|
||||
acc +2
|
||||
acc +29
|
||||
acc -6
|
||||
acc +0
|
||||
jmp -326
|
||||
jmp -426
|
||||
acc +18
|
||||
acc +39
|
||||
acc +22
|
||||
jmp +79
|
||||
jmp +23
|
||||
acc -17
|
||||
nop +42
|
||||
acc -8
|
||||
jmp -47
|
||||
acc -12
|
||||
jmp -276
|
||||
jmp -126
|
||||
acc +20
|
||||
acc +3
|
||||
acc +41
|
||||
jmp -31
|
||||
acc -1
|
||||
jmp +1
|
||||
jmp -241
|
||||
acc +9
|
||||
acc +12
|
||||
acc +0
|
||||
jmp +26
|
||||
acc +30
|
||||
nop +46
|
||||
jmp -134
|
||||
jmp -361
|
||||
acc +50
|
||||
nop -1
|
||||
nop -225
|
||||
jmp -226
|
||||
acc +42
|
||||
acc +0
|
||||
jmp +1
|
||||
jmp -170
|
||||
acc +14
|
||||
acc +19
|
||||
jmp -199
|
||||
nop +15
|
||||
acc -11
|
||||
acc +20
|
||||
jmp -161
|
||||
nop -348
|
||||
acc -6
|
||||
acc +49
|
||||
jmp -468
|
||||
acc +11
|
||||
jmp -413
|
||||
acc -11
|
||||
acc -1
|
||||
acc +45
|
||||
jmp -181
|
||||
jmp -380
|
||||
nop -128
|
||||
acc +40
|
||||
jmp -179
|
||||
acc -9
|
||||
acc +24
|
||||
jmp -358
|
||||
acc +50
|
||||
acc +13
|
||||
acc -15
|
||||
jmp +14
|
||||
acc +4
|
||||
acc +12
|
||||
jmp -365
|
||||
nop -269
|
||||
jmp -443
|
||||
nop -224
|
||||
jmp -108
|
||||
acc +46
|
||||
acc -11
|
||||
jmp -515
|
||||
acc -8
|
||||
nop -284
|
||||
jmp -444
|
||||
acc +15
|
||||
nop -11
|
||||
jmp -288
|
||||
acc +28
|
||||
acc +35
|
||||
jmp -416
|
||||
acc +27
|
||||
acc -8
|
||||
acc -10
|
||||
acc +0
|
||||
jmp -167
|
||||
acc -9
|
||||
acc +42
|
||||
acc +20
|
||||
jmp -63
|
||||
jmp -107
|
||||
acc -6
|
||||
jmp -335
|
||||
jmp -460
|
||||
acc -2
|
||||
jmp -420
|
||||
acc +27
|
||||
acc +6
|
||||
jmp -458
|
||||
acc +31
|
||||
nop +19
|
||||
nop -396
|
||||
jmp -479
|
||||
nop -234
|
||||
acc +42
|
||||
jmp -142
|
||||
jmp -511
|
||||
nop +28
|
||||
acc -9
|
||||
acc +36
|
||||
acc +38
|
||||
jmp +27
|
||||
acc -3
|
||||
acc +9
|
||||
acc -19
|
||||
acc +3
|
||||
jmp -133
|
||||
jmp -503
|
||||
jmp -267
|
||||
acc +40
|
||||
acc +41
|
||||
acc +13
|
||||
nop -492
|
||||
jmp -327
|
||||
jmp -339
|
||||
acc +17
|
||||
acc +4
|
||||
acc +45
|
||||
acc +13
|
||||
jmp -419
|
||||
acc +31
|
||||
acc +0
|
||||
acc +37
|
||||
acc -13
|
||||
jmp -210
|
||||
jmp -517
|
||||
acc -15
|
||||
jmp -47
|
||||
acc -16
|
||||
jmp -129
|
||||
acc +16
|
||||
nop -455
|
||||
nop -263
|
||||
jmp -74
|
||||
acc +5
|
||||
acc +20
|
||||
acc +45
|
||||
acc +23
|
||||
jmp -490
|
||||
jmp -53
|
||||
acc +40
|
||||
jmp +1
|
||||
acc -14
|
||||
acc -1
|
||||
jmp +1
|
50
day9/day9.py
50
day9/day9.py
@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import itertools
|
||||
|
||||
|
||||
def part1(inp):
|
||||
preamble_size = 25
|
||||
with open(inp) as infile:
|
||||
cleanfile = (int(l.rstrip()) for l in infile)
|
||||
for nums in window(cleanfile, preamble_size + 1):
|
||||
candidate = nums[-1]
|
||||
if not test_number(candidate, nums[:-1]):
|
||||
return candidate
|
||||
return -1
|
||||
|
||||
|
||||
def window(seq, n):
|
||||
it = iter(seq)
|
||||
result = tuple(itertools.islice(it, n))
|
||||
if len(result) == n:
|
||||
yield result
|
||||
for elem in it:
|
||||
result = result[1:] + (elem,)
|
||||
yield result
|
||||
|
||||
|
||||
def test_number(num, previous):
|
||||
sums = set(sum(x) for x in itertools.combinations(previous, 2))
|
||||
return num in sums
|
||||
|
||||
|
||||
def part2(infile, target: int):
|
||||
lines = [int(l.rstrip()) for l in open(infile).readlines()]
|
||||
total = 0
|
||||
visited = []
|
||||
for index, _ in enumerate(lines):
|
||||
i = index
|
||||
while total < target:
|
||||
total += lines[i]
|
||||
visited.append(lines[i])
|
||||
i += 1
|
||||
if total == target:
|
||||
return max(visited) + min(visited)
|
||||
visited.clear()
|
||||
total = 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
invalid_number = part1("input.txt")
|
||||
print("part1 ", invalid_number)
|
||||
print("part2 ", part2("input.txt", invalid_number))
|
1000
day9/input.txt
1000
day9/input.txt
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user