#!/usr/bin/env python SIZE_X=300 SIZE_Y=300 def get_cell_power(x, y, serial): rack_id = x + 10 power = rack_id * y power += serial power *= rack_id h = str(power)[-3] if power > 100 else '0' return int(h) - 5 def calculate(serial): square = dict() for x in range(1, SIZE_X+1): for y in range(1, SIZE_Y+1): p = get_cell_power(x, y, serial) for dx in range(-2, 1): cx = x + dx if cx < 1: continue if cx > SIZE_X: continue for dy in range(-2, 1): cy = y + dy if cy < 1: continue if cy > SIZE_Y: continue key = "{},{}".format(cx,cy) if key not in square: square[key] = 0 square[key] += p m = max([v for v in square.values()]) cell = [ k for k,v in square.items() if v == m] print(m) print(cell) #calculate(18) #calculate(42) calculate(8444)