-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday11.py
125 lines (102 loc) · 3.17 KB
/
day11.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import statistics
def part1():
with open('resources/input11.txt') as f:
lines = f.readlines()
map = list(list())
first_row = list()
last_row = list()
# buffers to avoid out of range index error
for i in range(0, 12):
first_row.append(-1)
last_row.append(-1)
map.append(first_row)
for line in lines:
row = list()
row.append(-1) # buffer
line = line.strip()
for char in line:
row.append((int(char)))
row.append(-1) # buffer
map.append(row)
map.append(last_row)
flash_count = 0
for _ in range(0, 100):
# increment all by 1
for x in range(1, 11):
for y in range(1, 11):
map[x][y] += 1
# adjust for flashes
for x in range(1, 11):
for y in range(1, 11):
flash(map, x, y)
for x in range(1, 11):
for y in range(1, 11):
if map[x][y] > 9:
flash_count += 1
map[x][y] = 0
print(flash_count)
def flash(map, x, y):
if map[x][y] != 10:
return
else:
map[x][y] += 1
increment_and_flash(map, x, y+1)
increment_and_flash(map, x, y-1)
increment_and_flash(map, x-1, y+1)
increment_and_flash(map, x-1, y-1)
increment_and_flash(map, x+1, y+1)
increment_and_flash(map, x+1, y-1)
increment_and_flash(map, x-1, y)
increment_and_flash(map, x+1, y)
def increment_and_flash(map, x, y):
if map[x][y] == -1:
return
# check if should flash before and after incrementing
flash(map, x, y)
map[x][y] += 1
if map[x][y] == 10:
flash(map, x, y)
def part2():
with open('resources/input11.txt') as f:
lines = f.readlines()
map = list(list())
first_row = list()
last_row = list()
# buffers to avoid out of range index error
for i in range(0, 12):
first_row.append(-1)
last_row.append(-1)
map.append(first_row)
for line in lines:
row = list()
row.append(-1) # buffer
line = line.strip()
for char in line:
row.append((int(char)))
row.append(-1) # buffer
map.append(row)
map.append(last_row)
attempt = 1
while True:
# increment all by 1
flash_count = 0
for x in range(1, 11):
for y in range(1, 11):
map[x][y] += 1
# adjust for flashes
for x in range(1, 11):
for y in range(1, 11):
flash(map, x, y)
for x in range(1, 11):
for y in range(1, 11):
if map[x][y] > 9:
flash_count += 1
map[x][y] = 0
if(flash_count == 100):
print(attempt)
break
else:
attempt += 1
if __name__ == '__main__':
part1()
part2()