| 123456789101112131415161718192021222324252627282930 |
- #!/usr/bin/env python3
- import sys
- import re
- ON, OFF, TOGGLE = 0, 1, 2
- mapping = {'turn on': ON, 'turn off': OFF, 'toggle': TOGGLE}
- pat = r'(turn on|turn off|toggle) (\d+),(\d+) through (\d+),(\d+)'
- actions = []
- for line in sys.stdin:
- action, xa, ya, xb, yb = re.match(pat, line).groups()
- actions.append((mapping[action], int(xa), int(xb), int(ya), int(yb)))
- # part 1
- w = h = 1000
- grid = w * h * [False]
- for action, xa, xb, ya, yb in actions:
- for x in range(xa, xb + 1):
- for y in range(ya, yb + 1):
- i = y * w + x
- grid[i] = not grid[i] if action == TOGGLE else action == ON
- print(sum(map(int, grid)))
- # part 2
- grid = w * h * [0]
- for action, xa, xb, ya, yb in actions:
- for x in range(xa, xb + 1):
- for y in range(ya, yb + 1):
- i = y * w + x
- grid[i] = max(0, grid[i] + (1, -1, 2)[action])
- print(sum(grid))
|