From 5b317570bb021378025e59f7c11b188a0d9d834a Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Mon, 30 Dec 2024 08:05:06 +0100 Subject: [PATCH] day13 --- day13.py | 67 +++++++++++++++++++++++++++++++++++++++++++++ inputs/input13 | 1 + inputs/input13_test | 1 + 3 files changed, 69 insertions(+) create mode 100644 day13.py create mode 100644 inputs/input13 create mode 100644 inputs/input13_test diff --git a/day13.py b/day13.py new file mode 100644 index 0000000..f5f817a --- /dev/null +++ b/day13.py @@ -0,0 +1,67 @@ +from collections import deque + +from tools.aoc import AOCDay +from typing import Any + +from tools.coordinate import Coordinate +from tools.grid import Grid + + +class Day(AOCDay): + inputs = [ + [ + (11, "input13_test"), + (92, "input13"), + ], + [ + (124, "input13"), + ], + ] + + def get_grid(self) -> Grid: + grid = Grid() + fav_number = self.getIntsFromInput()[0] + for x in range(50): + for y in range(50): + room_number = x * x + 3 * x + 2 * x * y + y + y * y + fav_number + set_bits = list(bin(room_number)[2:]).count("1") + if set_bits % 2 == 0: + grid.set(Coordinate(x, y)) + + return grid + + def run_maze(self) -> tuple[int, int] | None: + if self.is_test(): + target = Coordinate(7, 4) + else: + target = Coordinate(31, 39) + + grid = self.get_grid() + pos = Coordinate(1, 1) + q = deque([(0, pos)]) + seen = set() + rooms_reached = 0 + while q: + dist, pos = q.popleft() + if pos == target: + return dist, rooms_reached + if pos in seen: + continue + seen.add(pos) + if dist <= 50: + rooms_reached += 1 + for n in grid.getNeighboursOf(pos, includeDiagonal=False): + q.append((dist + 1, n)) + + return None + + def part1(self) -> Any: + return self.run_maze()[0] + + def part2(self) -> Any: + return self.run_maze()[1] + + +if __name__ == "__main__": + day = Day(2016, 13) + day.run(verbose=True) diff --git a/inputs/input13 b/inputs/input13 new file mode 100644 index 0000000..dda5087 --- /dev/null +++ b/inputs/input13 @@ -0,0 +1 @@ +1350 diff --git a/inputs/input13_test b/inputs/input13_test new file mode 100644 index 0000000..9a03714 --- /dev/null +++ b/inputs/input13_test @@ -0,0 +1 @@ +10 \ No newline at end of file