Skip to content

Commit 3706af0

Browse files
committed
Day 11 Python solutions
1 parent 644f876 commit 3706af0

File tree

2 files changed

+156
-0
lines changed

2 files changed

+156
-0
lines changed

11-1.py

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/usr/bin/env python
2+
3+
import numpy
4+
5+
class Map:
6+
def __init__(self, input):
7+
self.size = len(input)
8+
self.map = numpy.full((self.size, self.size), 0, dtype=numpy.uint)
9+
10+
for row in range(self.size):
11+
for col in range(self.size):
12+
self.map[row, col] = input[row][col]
13+
14+
self.flashed = numpy.full((self.size, self.size), 0, dtype=numpy.uint)
15+
self.num_flashes = 0
16+
17+
def increase(self, row, col):
18+
if 0 <= row < self.size and \
19+
0 <= col < self.size:
20+
self.map[row, col] += 1
21+
22+
def energize(self):
23+
for row in range(self.size):
24+
for col in range(self.size):
25+
self.increase(row, col)
26+
27+
def flash(self):
28+
flashed = False
29+
for row in range(self.size):
30+
for col in range(self.size):
31+
if self.map[row, col] <= 9 or self.flashed[row, col] == 1:
32+
continue
33+
34+
self.num_flashes += 1
35+
flashed = True
36+
self.flashed[row, col] = 1
37+
self.increase(row - 1, col - 1)
38+
self.increase(row - 1, col)
39+
self.increase(row - 1, col + 1)
40+
self.increase(row, col - 1)
41+
self.increase(row, col + 1)
42+
self.increase(row + 1, col - 1)
43+
self.increase(row + 1, col)
44+
self.increase(row + 1, col + 1)
45+
46+
return flashed
47+
48+
def reset(self):
49+
for row in range(self.size):
50+
for col in range(self.size):
51+
if self.flashed[row, col] == 1:
52+
self.map[row, col] = 0
53+
54+
self.flashed.fill(0)
55+
56+
def step(self):
57+
self.energize()
58+
while True:
59+
if not self.flash():
60+
break
61+
self.reset()
62+
63+
def __str__(self):
64+
return f"<{self.__class__.__name__}:\nsize: {self.size}\n{self.map}\n>"
65+
66+
67+
input = [list(line.strip()) for line in open('11.input').readlines()]
68+
map = Map(input)
69+
70+
for i in range(100):
71+
map.step()
72+
73+
print(map.num_flashes)

11-2.py

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#!/usr/bin/env python
2+
3+
import numpy
4+
5+
class Map:
6+
def __init__(self, input):
7+
self.size = len(input)
8+
self.map = numpy.full((self.size, self.size), 0, dtype=numpy.uint)
9+
10+
for row in range(self.size):
11+
for col in range(self.size):
12+
self.map[row, col] = input[row][col]
13+
14+
self.flashed = numpy.full((self.size, self.size), 0, dtype=numpy.uint)
15+
self.num_flashes = 0
16+
17+
def increase(self, row, col):
18+
if 0 <= row < self.size and \
19+
0 <= col < self.size:
20+
self.map[row, col] += 1
21+
22+
def energize(self):
23+
for row in range(self.size):
24+
for col in range(self.size):
25+
self.increase(row, col)
26+
27+
def flash(self):
28+
flashed = False
29+
for row in range(self.size):
30+
for col in range(self.size):
31+
if self.map[row, col] <= 9 or self.flashed[row, col] == 1:
32+
continue
33+
34+
self.num_flashes += 1
35+
flashed = True
36+
self.flashed[row, col] = 1
37+
self.increase(row - 1, col - 1)
38+
self.increase(row - 1, col)
39+
self.increase(row - 1, col + 1)
40+
self.increase(row, col - 1)
41+
self.increase(row, col + 1)
42+
self.increase(row + 1, col - 1)
43+
self.increase(row + 1, col)
44+
self.increase(row + 1, col + 1)
45+
46+
return flashed
47+
48+
def reset(self):
49+
for row in range(self.size):
50+
for col in range(self.size):
51+
if self.flashed[row, col] == 1:
52+
self.map[row, col] = 0
53+
54+
self.flashed.fill(0)
55+
56+
def step(self):
57+
self.energize()
58+
while True:
59+
if not self.flash():
60+
break
61+
all_flashed = True
62+
for row in range(self.size):
63+
for col in range(self.size):
64+
if self.flashed[row, col] == 0:
65+
all_flashed = False
66+
break
67+
self.reset()
68+
return all_flashed
69+
70+
def __str__(self):
71+
return f"<{self.__class__.__name__}:\nsize: {self.size}\n{self.map}\n>"
72+
73+
74+
input = [list(line.strip()) for line in open('11.input').readlines()]
75+
map = Map(input)
76+
77+
step = 0
78+
while True:
79+
step += 1
80+
if map.step():
81+
break
82+
83+
print(step)

0 commit comments

Comments
 (0)