[py] Port 2018_11

This commit is contained in:
Joscha 2022-12-06 15:44:22 +01:00
parent 5378a7f680
commit 39982ce5b5
3 changed files with 80 additions and 80 deletions

View file

@ -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,

78
py/aoc/y2018/d11.py Normal file
View file

@ -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")