advent-of-code/py/aoc/y2018/d11.py
2022-12-06 15:44:22 +01:00

78 lines
1.5 KiB
Python

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