From e8b37bdddbf941cebd6b787e6287941c049db1b9 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Mon, 30 Oct 2023 07:10:18 +0100 Subject: [PATCH] day11 (unfinished) --- answer_cache.json | 10 ++++++ day11.py | 77 ++++++++++++++++++++++++++++++++++++++++++++ inputs/input11 | 1 + inputs/input11_test | 1 + inputs/input11_test2 | 1 + 5 files changed, 90 insertions(+) create mode 100644 day11.py create mode 100644 inputs/input11 create mode 100644 inputs/input11_test create mode 100644 inputs/input11_test2 diff --git a/answer_cache.json b/answer_cache.json index bae588c..0752fb5 100644 --- a/answer_cache.json +++ b/answer_cache.json @@ -93,5 +93,15 @@ "wrong": [], "correct": 3333662986 } + }, + "11": { + "1": { + "wrong": [], + "correct": "243,34" + }, + "2": { + "wrong": [], + "correct": "90,214,15" + } } } \ No newline at end of file diff --git a/day11.py b/day11.py new file mode 100644 index 0000000..b80da4c --- /dev/null +++ b/day11.py @@ -0,0 +1,77 @@ +from tools.aoc import AOCDay +from typing import Any + + +PRIMES = [2, 3, 5, 7, 11, 13, 17] + + +def get_max_power_point(power_grid: list[list[int]], window_size: int = 3) -> (int, int, int): + max_power_level = 0 + ret = (0, 0, 0) + + for y in range(300 - window_size): + for x in range(300 - window_size): + sub_power_level = sum( + sum(power_grid[z][x:x+window_size]) + for z in range(y, y + window_size) + ) + if sub_power_level > max_power_level: + max_power_level = sub_power_level + ret = (x, y, max_power_level) + + return ret + + +class Day(AOCDay): + inputs = [ + [ + ("33,45", "input11_test"), + ("21,61", "input11_test2"), + ("243,34", "input11"), + ], + [ + ("90,269,16", "input11_test"), + ("232,251,12", "input11_test2"), + ("90,214,15", "input11"), + ] + ] + + def get_power_grid(self) -> list[list[int]]: + serial = self.getInput(return_type=int) + grid = [] + for y in range(300): + sub_grid = [] + for x in range(300): + rack_id = x + 10 + power_level = rack_id * y + power_level += serial + power_level *= rack_id + power_level = (power_level // 100) % 10 + power_level -= 5 + sub_grid.append(power_level) + grid.append(sub_grid) + + return grid + + def part1(self) -> Any: + power_grid = self.get_power_grid() + return "%s,%s" % get_max_power_point(power_grid)[:-1] + + def part2(self) -> Any: + power_grid = self.get_power_grid() + max_power_level = 0 + max_power_ret = (0, 0, 0) + for i in range(2, 301): + (x, y, max_power) = get_max_power_point(power_grid, i) + if (x, y, max_power) == (0, 0, 0): + break + if max_power > max_power_level: + max_power_level = max_power + max_power_ret = (x, y, i) + + return "%s,%s,%s" % max_power_ret + + +if __name__ == '__main__': + day = Day(2018, 11) + day.run(verbose=True) diff --git a/inputs/input11 b/inputs/input11 new file mode 100644 index 0000000..223fd14 --- /dev/null +++ b/inputs/input11 @@ -0,0 +1 @@ +1718 \ No newline at end of file diff --git a/inputs/input11_test b/inputs/input11_test new file mode 100644 index 0000000..25bf17f --- /dev/null +++ b/inputs/input11_test @@ -0,0 +1 @@ +18 \ No newline at end of file diff --git a/inputs/input11_test2 b/inputs/input11_test2 new file mode 100644 index 0000000..f70d7bb --- /dev/null +++ b/inputs/input11_test2 @@ -0,0 +1 @@ +42 \ No newline at end of file