You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
911 B
Python

6 years ago
serial = 5535
cache = dict()
def get_power_level(x, y):
if (x, y) in cache:
return cache.get((x, y))
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
cache[(x, y)] = power_level
return power_level
m = dict()
for size in range(1, 301):
# for size in range(1, 4):
print('checking size:', size)
for x in range(0, 301 - size):
for y in range(0, 301 - size):
level = m.get((x, y, size - 1)) or 0
j = size - 1
for i in range(0, size - 1):
level += get_power_level(x + i, y + j)
level += get_power_level(x + j, y + i)
level += get_power_level(x + size - 1, y + size - 1)
m[(x, y, size)] = level
pos = max(m, key=m.get)
print(f'{pos[0]},{pos[1]},{pos[2]}')