From cda9d2d2ce3840557bb2d36659ff864c7d8d5c76 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sat, 19 Nov 2022 21:15:35 +0100 Subject: [PATCH] d3 --- day03.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++ inputs/input3 | 1 + inputs/input3_test | 1 + 3 files changed, 58 insertions(+) create mode 100644 day03.py create mode 100644 inputs/input3 create mode 100644 inputs/input3_test diff --git a/day03.py b/day03.py new file mode 100644 index 0000000..c0e16aa --- /dev/null +++ b/day03.py @@ -0,0 +1,56 @@ +from tools.aoc import AOCDay +from tools.coordinate import Coordinate +from tools.grid import Grid +from typing import Any + + +def build_grid(max_num: int, p2: bool = False) -> (Grid, Coordinate, int): + grid = Grid(0) + grid.set(Coordinate(0, 0), 1) + last_coord = Coordinate(0, 0) + last_num = max_num + dirs = [(-1, 0), (0, 1), (1, 0), (0, -1)] + dir_index = 2 + cur_dir = dirs[dir_index] + check_dir = dirs[dir_index + 1] + + for x in range(2, max_num + 1): + last_coord += Coordinate(*cur_dir) + if not p2: + grid.set(last_coord, x) + else: + sum = grid.getNeighbourSum(last_coord) + grid.set(last_coord, sum) + if sum > max_num: + return grid, last_coord, sum + if not grid.get(last_coord + Coordinate(*check_dir)): + dir_index = (dir_index + 1) % 4 + cur_dir = dirs[dir_index] + check_dir = dirs[(dir_index + 1) % 4] + + return grid, last_coord, last_num + + +class Day(AOCDay): + inputs = [ + [ + (31, "input3_test"), + (438, "input3") + ], + [ + (266330, "input3") + ] + ] + + def part1(self) -> Any: + g, c, _ = build_grid(int(self.getInput())) + return abs(c.x) + abs(c.y) + + def part2(self) -> Any: + g, c, i = build_grid(int(self.getInput()), True) + return i + + +if __name__ == '__main__': + day = Day(2017, 3) + day.run(verbose=True) diff --git a/inputs/input3 b/inputs/input3 new file mode 100644 index 0000000..e079a50 --- /dev/null +++ b/inputs/input3 @@ -0,0 +1 @@ +265149 diff --git a/inputs/input3_test b/inputs/input3_test new file mode 100644 index 0000000..23cbfa7 --- /dev/null +++ b/inputs/input3_test @@ -0,0 +1 @@ +1024 \ No newline at end of file