This commit is contained in:
Stefan Harmuth 2023-12-03 09:48:25 +01:00
parent c7294385cd
commit 5d91b0c64d

View File

@ -9,15 +9,17 @@ class Day(AOCDay):
inputs = [
[
(4361, "input3_test"),
(None, "input3"),
(560670, "input3"),
],
[
(None, "input3"),
(467835, "input3_test"),
(91622824, "input3"),
],
]
def parse_input(self) -> Grid:
grid = Grid()
num_found = 0
for y, l in enumerate(self.getInput()):
number_digits = set()
number = 0
@ -28,44 +30,64 @@ class Day(AOCDay):
else:
if number_digits:
for nc in number_digits:
grid.set(Coordinate(*nc), number)
grid.set(Coordinate(*nc), (num_found, number))
num_found += 1
number_digits = set()
number = 0
if c != ".":
grid.set(Coordinate(x, y), c)
if number_digits:
for nc in number_digits:
grid.set(Coordinate(*nc), (num_found, number))
num_found += 1
return grid
def part1(self) -> Any:
grid = self.parse_input()
sum = 0
part_number_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
for c in grid.getActiveCells():
v = grid.get(c)
if not isinstance(v, tuple):
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
num_id, num_value = v
if num_id in seen:
continue
return sum
for n in grid.getNeighboursOf(c, includeDefault=False, includeDiagonal=True):
nv = grid.get(n)
if nv and not isinstance(nv, tuple):
part_number_sum += num_value
seen.add(num_id)
break
return part_number_sum
def part2(self) -> Any:
return ""
grid = self.parse_input()
gear_ratio_sum = 0
for c in grid.getActiveCells():
if grid.get(c) != "*":
continue
count = 0
ratio = 1
seen = set()
for n in grid.getNeighboursOf(c, includeDiagonal=True, includeDefault=False):
num = grid.get(n)
if num and isinstance(num, tuple) and num[0] not in seen:
ratio *= num[1]
count += 1
seen.add(num[0])
if count == 2:
gear_ratio_sum += ratio
return gear_ratio_sum
if __name__ == "__main__":