aoc2018/day03.py
2021-12-29 16:42:03 +01:00

59 lines
1.6 KiB
Python

from tools.aoc import AOCDay
from typing import Any
from tools.coordinate import Coordinate, Shape, Square
from tools.grid import Grid
class Day(AOCDay):
inputs = [
[
(4, "test_input3"),
(121259, "input3")
],
[
(3, "test_input3"),
(239, "input3")
]
]
def getClaims(self) -> (int, int, int, int, int): # claim_id, x, y, width, height
for claim in self.getInput():
v = claim.split()
claim_id = int(v[0][1:])
x, y = map(int, v[2][:-1].split(","))
wx, wy = map(int, v[3].split("x"))
yield claim_id, x, y, wx, wy
def part1(self) -> Any:
grid = Grid(0)
for _, x, y, wx, wy in self.getClaims():
for dx in range(wx):
for dy in range(wy):
grid.add(Coordinate(x + dx, y + dy))
return len(list(x for x in grid.getActiveCells() if grid.get(x) > 1))
def part2(self) -> Any:
claims = []
for claim_id, x, y, wx, wy in self.getClaims():
claims.append((claim_id, Square(Coordinate(x, y), Coordinate(x + wx - 1, y + wy - 1))))
for claim_id, claim in enumerate(claims):
intersect = False
for sub_claim_id, sub_claim in claims:
if sub_claim_id == claim_id:
continue
if claim & sub_claim:
intersect = True
break
if not intersect:
return claim_id
if __name__ == '__main__':
day = Day(2018, 3)
day.run(verbose=True)