solution.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/env python3
  2. import sys
  3. import copy
  4. matrix = []
  5. for line in sys.stdin:
  6. matrix.append([ int(e) for e in line.rstrip('\n') ])
  7. matrix_next = copy.deepcopy(matrix)
  8. flashed = [[ False for e in row ] for row in matrix ]
  9. flashes = 0
  10. prev_flashes = 0
  11. for i in range(int(sys.argv[1]) + 1 if len(sys.argv) > 1 else 128):
  12. prev_flashes = flashes
  13. for run in range(8):
  14. for y in range(len(matrix)):
  15. for x in range(len(matrix[y])):
  16. if run == 0:
  17. matrix_next[y][x] += 1
  18. if matrix_next[y][x] > 9 and not flashed[y][x]:
  19. flashes += 1
  20. flashed[y][x] = True
  21. for y_offset in range(-1, 2):
  22. if y + y_offset < 0 or y + y_offset >= len(matrix): continue
  23. for x_offset in range(-1, 2):
  24. if x + x_offset < 0 or x + x_offset >= len(matrix[y]): continue
  25. matrix_next[y + y_offset][x + x_offset] += 1
  26. for y, row in enumerate(matrix):
  27. for x, col in enumerate(row):
  28. if flashed[y][x]:
  29. matrix_next[y][x] = 0
  30. flashed[y][x] = False
  31. print('matrix')
  32. print('\n'.join(', '.join([ '\033[95m' + str(e) + '\033[0m' if e == 0 else str(e) for e in row ]) for row in matrix))
  33. #print('next')
  34. #print('\n'.join(', '.join([ '\033[95m' + str(e) + '\033[0m' if e == 0 else str(e) for e in row ]) for row in matrix_next))
  35. print('\n'.join(str(row) for row in flashed))
  36. print(f'total of {prev_flashes} after {i} steps')
  37. matrix = copy.deepcopy(matrix_next)