This repository was archived by the owner on Feb 1, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path11_1.py
More file actions
72 lines (61 loc) · 1.34 KB
/
11_1.py
File metadata and controls
72 lines (61 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from utils import *
import numpy as np
lines = read_lines(day=11)
example = (
"5483143223",
"2745854711",
"5264556173",
"6141336146",
"6357385478",
"4167524645",
"2176841721",
"6882881134",
"4846848554",
"5283751526"
)
def dirs(x, y, w, h):
# 1, 2, 3 # y-1
# 4, n, 5 # y
# 6, 7, 8 # y+1
# # # # # #
#x-1, x, x+1
# y - 1
if x - 1 >= 0 and y - 1 >= 0:
yield x - 1, y - 1
if y - 1 >= 0:
yield x, y - 1
if x + 1 < w and y - 1 >= 0:
yield x + 1, y - 1
# y
if x - 1 >= 0:
yield x - 1, y
if x + 1 < w:
yield x + 1, y
# y + 1
if x - 1 >= 0 and y + 1 < h:
yield x - 1, y + 1
if y + 1 < h:
yield x, y + 1
if x + 1 < w and y + 1 < h:
yield x + 1, y + 1
def main(data):
data = [tuple(line) for line in data]
grid = np.array(data, dtype=int)
count = 0
for _ in range(100): # steps
grid += 1
stack, visited = list(zip(*(grid > 9).nonzero())), set()
while stack:
y, x = stack.pop()
if (y, x) in visited:
continue
visited.add((y, x))
for dx, dy in dirs(x, y, grid.shape[1], grid.shape[0]):
grid[dy][dx] += 1
if grid[dy][dx] > 9 and (dy, dx) not in visited:
stack.append((dy, dx))
grid[(_f := (grid > 9))] = 0
count += _f.sum()
print(count)
if __name__ == "__main__":
main(lines) # answer: 1717