11_fuelcells.py 896 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/env python3
  2. serial = 5791
  3. w = 300
  4. grid = w * w * [0]
  5. for y in range(w):
  6. for x in range(w):
  7. rack = x + 11
  8. grid[y * w + x] = (rack * (y + 1) + serial) * rack // 100 % 10 - 5
  9. for i in range(len(grid)):
  10. y, x = divmod(i, w)
  11. top = grid[i - w] if y else 0
  12. left = grid[i - 1] if x else 0
  13. topleft = grid[i - w - 1] if x and y else 0
  14. grid[i] += top + left - topleft
  15. def squares(sz):
  16. for y in range(w - sz + 1):
  17. for x in range(w - sz + 1):
  18. s = grid[(y + sz - 1) * w + (x + sz - 1)]
  19. if y and x: s += grid[(y - 1) * w + (x - 1)]
  20. if x: s -= grid[(y + sz - 1) * w + (x - 1)]
  21. if y: s -= grid[(y - 1) * w + (x + sz - 1)]
  22. yield s, x + 1, y + 1
  23. s, x, y = max(squares(3))
  24. print(x, y, sep=',')
  25. s, x, y, sz = max(max(squares(sz)) + (sz,) for sz in range(1, w + 1))
  26. print(x, y, sz, sep=',')