Advertisement
Guest User

Untitled

a guest
Dec 10th, 2021
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.19 KB | None | 0 0
  1. import itertools
  2.  
  3. grid = []
  4. with open('day11.txt', 'r') as f:
  5.     for line in f:
  6.         line = line.strip()
  7.         if not line:
  8.             continue
  9.         grid.append(line)
  10.  
  11. width, height = len(grid[0]), len(grid)
  12.  
  13. def neighbors(p):
  14.     for d in itertools.product(range(-1, 2), repeat=2):
  15.         if d == (0, 0):
  16.             continue
  17.         x = p[0] + d[0]
  18.         y = p[1] + d[1]
  19.         if (0 <= x < width) and (0 <= y < height):
  20.             yield (x, y)
  21.  
  22. grid = [[int(x) for x in row] for row in grid]
  23.  
  24. cells = width * height
  25. total_flashes = 0
  26. for step in itertools.count(1):
  27.     flashes = 0
  28.     grid = [[x + 1 for x in row] for row in grid]
  29.     stack = [(i, j) for i, row in enumerate(grid) for j, x in enumerate(row) if x > 9]
  30.     while stack:
  31.         (i, j) = stack.pop()
  32.         flashes += 1
  33.         for (i1, j1) in neighbors((i, j)):
  34.             grid[i1][j1] += 1
  35.             if grid[i1][j1] == 10:
  36.                 stack.append((i1, j1))
  37.     total_flashes += flashes
  38.     if step == 100:
  39.         print(f"Part 1: {total_flashes}")
  40.     if flashes == cells:
  41.         print(f"Part 2: {step}")
  42.         break
  43.     grid = [[0 if x > 9 else x for x in row] for row in grid]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement