advent-of-code-2025/day-04/part-1.py

52 lines
1.2 KiB
Python

import aocd
from enum import Enum
class Direction(complex, Enum):
NORTH = -1j
SOUTH = 1j
EAST = -1
WEST = 1
NORTHWEST = NORTH+WEST
NORTHEAST = NORTH+EAST
SOUTHWEST = SOUTH+WEST
SOUTHEAST = SOUTH+EAST
class Paper:
def __init__(self, x, y, floor):
self.coords = complex(real=x, imag=y)
self.floor = floor
@property
def x(self):
return int(self.coords.real)
@property
def y(self):
return int(self.coords.imag)
@property
def neighbours(self):
yield from filter(None, (self.floor.get(self.coords + dir) for dir in Direction))
def parse(data):
floor = {}
for y, line in enumerate(data.split('\n')):
for x, char in enumerate(line):
if char == '@':
floor[complex(real=x, imag=y)] = Paper(x, y, floor)
return floor
def is_accessible(paper):
return sum(1 for _ in paper.neighbours) < 4
def main(data):
floor = parse(data.strip())
return sum(is_accessible(paper) for paper in floor.values())
if __name__ == '__main__':
solution = main(aocd.get_data(day=4, year=2025))
print(solution)
aocd.submit(solution, part='a', day=4, year=2025)