11.py
1 from lib import * 2 3 input = read_input(2021, 11) 4 5 6 lines = input.splitlines() 7 grid = [[*map(int, line)] for line in lines] 8 out = 0 9 for _ in range(100): 10 flashes = [] 11 visited = set() 12 for i, row in enumerate(grid): 13 for j, x in enumerate(row): 14 if x >= 9: 15 flashes.append((i, j)) 16 else: 17 row[j] += 1 18 19 while flashes: 20 i, j = flashes.pop(0) 21 if (i, j) in visited: 22 continue 23 24 visited.add((i, j)) 25 grid[i][j] = 0 26 out += 1 27 for q, p in get_neighbors(j, i, len(lines[0]), len(lines), diag=True): 28 x = grid[p][q] 29 if x >= 9: 30 flashes.append((p, q)) 31 elif (p, q) not in visited: 32 grid[p][q] += 1 33 34 print(out) 35 36 37 grid = [[*map(int, line)] for line in lines] 38 39 for step in irange(): 40 flashes = [] 41 42 visited = set() 43 44 for i, row in enumerate(grid): 45 for j, x in enumerate(row): 46 if x >= 9: 47 flashes.append((i, j)) 48 49 else: 50 row[j] += 1 51 52 while flashes: 53 i, j = flashes.pop(0) 54 55 if (i, j) in visited: 56 continue 57 58 visited.add((i, j)) 59 60 grid[i][j] = 0 61 62 for q, p in get_neighbors(j, i, len(lines[0]), len(lines), diag=True): 63 x = grid[p][q] 64 65 if x >= 9: 66 flashes.append((p, q)) 67 68 elif (p, q) not in visited: 69 grid[p][q] += 1 70 71 if len(visited) == len(lines) * len(lines[0]): 72 print(step + 1) 73 break