Loading 2021/day11/code.py 0 → 100644 +82 −0 Original line number Diff line number Diff line #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import scipy.ndimage as ndimage def step(data): flash = 0 canflash = np.ones(data.shape, dtype=np.int64) data += 1 while np.any(data > 9): for j, c in enumerate(data): for i, r in enumerate(c): myval = data[j, i] if myval > 9 and canflash[j,i]: flash += 1 for dy in [-1, 0, 1]: for dx in [-1, 0, 1]: if (dx == 0 and dy == 0): pass elif (i == 0 and dx == -1): pass elif (j == 0 and dy == -1): pass else: try: data[j+dy, i+dx] += 1 except IndexError: pass data[j,i] = 0 canflash[j,i] = 0 data *= canflash return data, flash def sol1(filename): data = [] with open(filename, 'r') as f: for line in f.readlines(): line = line.strip() data.append([int(x) for x in line]) data = np.array(data, dtype=np.int64) print(data) nflash = 0 for _ in range(100): data, flash = step(data) nflash += flash print(data) print(nflash) def sol2(filename): data = [] with open(filename, 'r') as f: for line in f.readlines(): line = line.strip() data.append([int(x) for x in line]) data = np.array(data, dtype=np.int64) print(data) maxflash = data.shape[0] * data.shape[1] nstep = 0 flash = 0 while flash != maxflash: data, flash = step(data) nstep += 1 print(nstep, end = '\r') print(data) print(nstep, flash) def main(): filename='input' # sol1(filename) print() sol2(filename) return if __name__ == "__main__": try: main() except KeyboardInterrupt: raise SystemExit("User interruption.") 2021/day11/input 0 → 100644 +10 −0 Original line number Diff line number Diff line 1224346384 5621128587 6388426546 1556247756 1451811573 1832388122 2748545647 2582877432 3185643871 2224876627 2021/day11/test 0 → 100644 +10 −0 Original line number Diff line number Diff line 5483143223 2745854711 5264556173 6141336146 6357385478 4167524645 2176841721 6882881134 4846848554 5283751526 Loading
2021/day11/code.py 0 → 100644 +82 −0 Original line number Diff line number Diff line #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import scipy.ndimage as ndimage def step(data): flash = 0 canflash = np.ones(data.shape, dtype=np.int64) data += 1 while np.any(data > 9): for j, c in enumerate(data): for i, r in enumerate(c): myval = data[j, i] if myval > 9 and canflash[j,i]: flash += 1 for dy in [-1, 0, 1]: for dx in [-1, 0, 1]: if (dx == 0 and dy == 0): pass elif (i == 0 and dx == -1): pass elif (j == 0 and dy == -1): pass else: try: data[j+dy, i+dx] += 1 except IndexError: pass data[j,i] = 0 canflash[j,i] = 0 data *= canflash return data, flash def sol1(filename): data = [] with open(filename, 'r') as f: for line in f.readlines(): line = line.strip() data.append([int(x) for x in line]) data = np.array(data, dtype=np.int64) print(data) nflash = 0 for _ in range(100): data, flash = step(data) nflash += flash print(data) print(nflash) def sol2(filename): data = [] with open(filename, 'r') as f: for line in f.readlines(): line = line.strip() data.append([int(x) for x in line]) data = np.array(data, dtype=np.int64) print(data) maxflash = data.shape[0] * data.shape[1] nstep = 0 flash = 0 while flash != maxflash: data, flash = step(data) nstep += 1 print(nstep, end = '\r') print(data) print(nstep, flash) def main(): filename='input' # sol1(filename) print() sol2(filename) return if __name__ == "__main__": try: main() except KeyboardInterrupt: raise SystemExit("User interruption.")
2021/day11/input 0 → 100644 +10 −0 Original line number Diff line number Diff line 1224346384 5621128587 6388426546 1556247756 1451811573 1832388122 2748545647 2582877432 3185643871 2224876627
2021/day11/test 0 → 100644 +10 −0 Original line number Diff line number Diff line 5483143223 2745854711 5264556173 6141336146 6357385478 4167524645 2176841721 6882881134 4846848554 5283751526