소스 검색

Solve 2021 day 11

Taddeus Kroes 4 년 전
부모
커밋
aedc73f4c0
2개의 변경된 파일51개의 추가작업 그리고 0개의 파일을 삭제
  1. 41 0
      2021/11_octoflash.py
  2. 10 0
      2021/input/11

+ 41 - 0
2021/11_octoflash.py

@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+import sys
+from itertools import count
+
+def parse(content):
+    return list(map(int, content.replace('\n', ''))), content.find('\n')
+
+def flash(grid, w):
+    h = len(grid) // w
+
+    def neighbors(i):
+        y, x = divmod(i, w)
+        if y:
+            if x: yield i - w - 1
+            yield i - w
+            if x < w - 1: yield i - w + 1
+        if x: yield i - 1
+        if x < w - 1: yield i + 1
+        if y < h - 1:
+            if x: yield i + w - 1
+            yield i + w
+            if x < w - 1: yield i + w + 1
+
+    def increase(i):
+        grid[i] += 1
+        if grid[i] == 10:
+            for nb in neighbors(i):
+                increase(nb)
+
+    for i in range(len(grid)):
+        increase(i)
+    flashed = 0
+    for i, energy in enumerate(grid):
+        if energy > 9:
+            flashed += 1
+            grid[i] = 0
+    return flashed
+
+grid, w = parse(sys.stdin.read())
+print(sum(flash(grid, w) for i in range(100)))
+print(next(n for n in count(101) if flash(grid, w) == len(grid)))

+ 10 - 0
2021/input/11

@@ -0,0 +1,10 @@
+6617113584
+6544218638
+5457331488
+1135675587
+1221353216
+1811124378
+1387864368
+4427637262
+6778645486
+3682146745