From 39982ce5b5908b977e3d1ea87b3601a7e3a0127b Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 6 Dec 2022 15:44:22 +0100 Subject: [PATCH] [py] Port 2018_11 --- py/2018/11/solve.py | 79 --------------------------------------------- py/aoc/__init__.py | 3 +- py/aoc/y2018/d11.py | 78 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 80 deletions(-) delete mode 100644 py/2018/11/solve.py create mode 100644 py/aoc/y2018/d11.py diff --git a/py/2018/11/solve.py b/py/2018/11/solve.py deleted file mode 100644 index 8f75ba2..0000000 --- a/py/2018/11/solve.py +++ /dev/null @@ -1,79 +0,0 @@ -import sys - -# PART 1 - -def nth_digit(num, pos): - # nth_digit(1234, 0) = 123[4] = 4 - # nth_digit(1234, 2) = 1[2]34 = 2 - # nth_digit(1234, 4) = [0]1234 = 0 - - pos += 1 - s = ("{:0" + str(pos) + "}").format(num) # UGLY! - n = s[-pos] - return int(n) - -def power_level(number, x, y): - rack_id = x + 10 - level = rack_id * y - level += number - level *= rack_id - level = nth_digit(level, 2) # 100-er digit - level -= 5 - return level - -def init_grid(number): - grid = {} - for x in range(1, 300 + 1): - for y in range(1, 300 + 1): - grid[(x, y)] = power_level(number, x, y) - return grid - -def power_of_square(grid, x, y): - power = 0 - for dx in range(3): - for dy in range(3): - power += grid[(x+dx, y+dy)] - return power - -def find_max_power(grid): - max_power = 0 - max_coords = None - - for x in range(1, 300 - 2 + 1): - for y in range(1, 300 - 2 + 1): - power = power_of_square(grid, x, y) - if power > max_power: - max_power = power - max_coords = (x, y) - - return max_coords - -# PART 2 - -def square_power(grid, x, y, size): - pass - -def max_square(grid): - max_power = 0 - max_coords = None - max_size = None - - for size in range(1, 300 + 1): - for x in range(1, 300 + 1 - (size - 1)): - for y in range(1, 300 + 1 - (size - 1)): - pass - -def main(number): - print(f"Solutions for {number}") - grid = init_grid(number) - x, y = find_max_power(grid) - print(f"Part 1: {x},{y}") - print(f"Part 2: NYI") - -if __name__ == "__main__": - print(power_level( 8, 3, 5)) - print(power_level(57, 122, 79)) - print(power_level(39, 217, 196)) - print(power_level(71, 101, 153)) - - main(5153) diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index fe4c179..62fe93e 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,7 +2,7 @@ import sys import argparse from pathlib import Path -from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10 +from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11 from .y2020 import d10 from .y2021 import d14 from .y2022 import d01, d02, d03, d04, d05, d06 @@ -18,6 +18,7 @@ DAYS = { "2018_08": y2018.d08.solve, "2018_09": y2018.d09.solve, "2018_10": y2018.d10.solve, + "2018_11": y2018.d11.solve, "2020_10": y2020.d10.solve, "2021_14": y2021.d14.solve, "2022_01": y2022.d01.solve, diff --git a/py/aoc/y2018/d11.py b/py/aoc/y2018/d11.py new file mode 100644 index 0000000..2c07872 --- /dev/null +++ b/py/aoc/y2018/d11.py @@ -0,0 +1,78 @@ +# PART 1 + + +def nth_digit(num, pos): + # nth_digit(1234, 0) = 123[4] = 4 + # nth_digit(1234, 2) = 1[2]34 = 2 + # nth_digit(1234, 4) = [0]1234 = 0 + + pos += 1 + s = ("{:0" + str(pos) + "}").format(num) # UGLY! + n = s[-pos] + return int(n) + + +def power_level(number, x, y): + rack_id = x + 10 + level = rack_id * y + level += number + level *= rack_id + level = nth_digit(level, 2) # 100-er digit + level -= 5 + return level + + +def init_grid(number): + grid = {} + for x in range(1, 300 + 1): + for y in range(1, 300 + 1): + grid[(x, y)] = power_level(number, x, y) + return grid + + +def power_of_square(grid, x, y): + power = 0 + for dx in range(3): + for dy in range(3): + power += grid[(x + dx, y + dy)] + return power + + +def find_max_power(grid): + max_power = 0 + max_coords = None + + for x in range(1, 300 - 2 + 1): + for y in range(1, 300 - 2 + 1): + power = power_of_square(grid, x, y) + if power > max_power: + max_power = power + max_coords = (x, y) + + return max_coords + + +# PART 2 + + +def square_power(grid, x, y, size): + pass + + +def max_square(grid): + max_power = 0 + max_coords = None + max_size = None + + for size in range(1, 300 + 1): + for x in range(1, 300 + 1 - (size - 1)): + for y in range(1, 300 + 1 - (size - 1)): + pass + + +def solve(inputstr): + number = int(inputstr.strip()) + grid = init_grid(number) + x, y = find_max_power(grid) + print(f"Part 1: {x},{y}") + print(f"Part 2: NYI")