generated from public/aoc_template
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
from tools.aoc import AOCDay
|
|
from typing import Any
|
|
|
|
from tools.coordinate import Coordinate
|
|
from tools.grid import Grid
|
|
|
|
|
|
class Day(AOCDay):
|
|
inputs = [
|
|
[
|
|
(4361, "input3_test"),
|
|
(None, "input3"),
|
|
],
|
|
[
|
|
(None, "input3"),
|
|
],
|
|
]
|
|
|
|
def parse_input(self) -> Grid:
|
|
grid = Grid()
|
|
for y, l in enumerate(self.getInput()):
|
|
number_digits = set()
|
|
number = 0
|
|
for x, c in enumerate(l):
|
|
if c.isdigit():
|
|
number_digits.add((x, y))
|
|
number = number * 10 + int(c)
|
|
else:
|
|
if number_digits:
|
|
for nc in number_digits:
|
|
grid.set(Coordinate(*nc), number)
|
|
number_digits = set()
|
|
number = 0
|
|
|
|
if c != ".":
|
|
grid.set(Coordinate(x, y), c)
|
|
|
|
return grid
|
|
|
|
def part1(self) -> Any:
|
|
grid = self.parse_input()
|
|
sum = 0
|
|
seen = set()
|
|
for y in grid.rangeY():
|
|
for x in grid.rangeX():
|
|
if Coordinate(x, y) in seen:
|
|
continue
|
|
c = grid.get(Coordinate(x, y))
|
|
if c and isinstance(c, int):
|
|
print(f"investigate {c} at {x}, {y}")
|
|
found = False
|
|
for dx in range(len(str(c))):
|
|
num_c = Coordinate(x + dx, y)
|
|
if num_c in seen:
|
|
continue
|
|
|
|
seen.add(num_c)
|
|
for n in grid.getNeighboursOf(num_c, includeDiagonal=True, includeDefault=False):
|
|
if not found and grid.get(n) != c: # and not isinstance(grid.get(n), int):
|
|
print(f"{c} has {grid.get(n)} at {n}")
|
|
sum += c
|
|
found = True
|
|
break
|
|
|
|
return sum
|
|
|
|
def part2(self) -> Any:
|
|
return ""
|
|
|
|
|
|
if __name__ == "__main__":
|
|
day = Day(2023, 3)
|
|
day.run(verbose=True)
|