In [1]:
import sys
import numpy as np
In [2]:
GRID_SERIAL_NUMBER = 5093
In [3]:
def power_level(x, y):
rack_id = x + 10
power = rack_id * y
power += GRID_SERIAL_NUMBER
power *= rack_id
power = (power % 1000) // 100
power -= 5
return power
In [4]:
power_level(8,1)
Out[4]:
In [5]:
def racks(grid, cx, cy):
xm, ym = grid.shape
for row in range(0, ym - cx + 1):
for col in range(0, xm - cx + 1):
yield grid[row:row + cy, col:col + cx], col, row
In [6]:
grid = np.fromfunction(np.vectorize(power_level), (10, 10))
In [7]:
grid
Out[7]:
In [8]:
racks(grid, 3, 3)
Out[8]:
In [11]:
for rack, col, row in racks(grid, 3, 3):
print(f"{col}x{row} {rack}")
In [12]:
def part_one():
grid = np.fromfunction(np.vectorize(power_level), (300, 300))
max_power = -sys.maxsize
max_rack = None
for rack, col, row in racks(grid, 3, 3):
power = np.sum(rack)
if power > max_power:
max_power = power
max_rack = (col, row)
return (max_power, max_rack)
In [13]:
(max_power, max_rack) = part_one()
In [14]:
max_power
Out[14]:
In [15]:
max_rack
Out[15]:
In [ ]: