Skip to content

Commit e856a96

Browse files
committed
Day 11 in Python
1 parent 7c9f46f commit e856a96

File tree

4 files changed

+83
-0
lines changed

4 files changed

+83
-0
lines changed

day11.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import sys
2+
from collections import defaultdict
3+
from functools import reduce
4+
from operator import add
5+
6+
def adjacent(i,j):
7+
return ((i+1,j), (i-1,j), (i,j+1), (i,j-1), (i+1,j+1), (i-1,j-1), (i+1,j-1), (i-1,j+1))
8+
9+
def in_range(i, j, size):
10+
return 0 <= min(i, j) and max(i, j) < size
11+
12+
def find_high_energy(levels):
13+
return set([ location for location in levels if levels[location] > 9 ])
14+
15+
def flash(levels, size):
16+
for i in range(size):
17+
for j in range(size):
18+
levels[(i,j)] += 1
19+
20+
flashing = find_high_energy(levels)
21+
flashed = set()
22+
while len(flashing - flashed):
23+
for location in (flashing - flashed):
24+
flashed.add(location)
25+
i, j = location
26+
for adj in adjacent(i,j):
27+
ai, aj = adj
28+
if in_range(ai, aj, size):
29+
levels[adj] += 1
30+
flashing = find_high_energy(levels)
31+
32+
for location in flashed:
33+
levels[location] = 0
34+
return len(flashed)
35+
36+
def flashesAfter(levels, size, steps):
37+
return reduce(add, [ flash(levels, size) for _ in range(steps) ])
38+
39+
def main(args = ()):
40+
fileName = "day11.txt" if len(args) < 1 else args[0]
41+
42+
levels = defaultdict(int)
43+
with open(fileName) as lines:
44+
for j, row in enumerate(lines):
45+
for i, energy in enumerate(row.strip()):
46+
levels[(i,j)] = int(energy)
47+
size = max(i+1, j+1)
48+
49+
steps = 100
50+
print("Part 1:", flashesAfter(levels, size, steps))
51+
52+
while not all([ levels[location] == 0 for location in levels ]):
53+
flash(levels, size)
54+
steps +=1
55+
print("Part 2:", steps)
56+
57+
if __name__ == "__main__":
58+
sys.exit(main(sys.argv[1:]))

day11.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
5212166716
2+
1567322581
3+
2268461548
4+
3481561744
5+
6248342248
6+
6526667368
7+
5627335775
8+
8124511754
9+
4614137683
10+
4724561156

day11sample.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
5483143223
2+
2745854711
3+
5264556173
4+
6141336146
5+
6357385478
6+
4167524645
7+
2176841721
8+
6882881134
9+
4846848554
10+
5283751526

day11sample2.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
11111
2+
19991
3+
19191
4+
19991
5+
11111

0 commit comments

Comments
 (0)