06_lights.py 883 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/env python3
  2. import sys
  3. import re
  4. ON, OFF, TOGGLE = 0, 1, 2
  5. mapping = {'turn on': ON, 'turn off': OFF, 'toggle': TOGGLE}
  6. pat = r'(turn on|turn off|toggle) (\d+),(\d+) through (\d+),(\d+)'
  7. actions = []
  8. for line in sys.stdin:
  9. action, xa, ya, xb, yb = re.match(pat, line).groups()
  10. actions.append((mapping[action], int(xa), int(xb), int(ya), int(yb)))
  11. # part 1
  12. w = h = 1000
  13. grid = w * h * [False]
  14. for action, xa, xb, ya, yb in actions:
  15. for x in range(xa, xb + 1):
  16. for y in range(ya, yb + 1):
  17. i = y * w + x
  18. grid[i] = not grid[i] if action == TOGGLE else action == ON
  19. print(sum(map(int, grid)))
  20. # part 2
  21. grid = w * h * [0]
  22. for action, xa, xb, ya, yb in actions:
  23. for x in range(xa, xb + 1):
  24. for y in range(ya, yb + 1):
  25. i = y * w + x
  26. grid[i] = max(0, grid[i] + (1, -1, 2)[action])
  27. print(sum(grid))