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()) total = 0 while (removable := set(paper for paper in floor.values() if is_accessible(paper))): total += len(removable) for paper in removable: del floor[paper.coords] return total if __name__ == '__main__': solution = main(aocd.get_data(day=4, year=2025)) print(solution) aocd.submit(solution, part='b', day=4, year=2025)