temp.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from collections import Counter
  2. class Grid():
  3. dim = 12
  4. def __init__(self):
  5. self.cells = [(x, y) for x in range(Grid.dim) for y in range(Grid.dim)]
  6. def neighbors(self, x, y, diags=False):
  7. neighs = [(x, y - 1), (x - 1, y), (x + 1, y), (x, y + 1)]
  8. if diags:
  9. neighs += [(x - 1, y - 1), (x + 1, y - 1), (x - 1, y + 1), (x + 1, y + 1)]
  10. return [(x, y) for x, y in neighs if 0 <= x < Grid.dim and 0 <= y < Grid.dim]
  11. def _active_owned(self, pos):
  12. return pos in [(9, 9), (8, 9), (10, 9), (10, 10), (7, 9),
  13. (9, 11), (11, 10), (10, 11), (11, 9), (11, 11),
  14. (8, 11), (7, 11), (6, 11), (5, 11)]
  15. def update_pivot_for(self):
  16. start = (11,11)
  17. buffer = [start]
  18. visited_from = {start: []}
  19. while buffer:
  20. new_buffer = []
  21. for p in buffer:
  22. for n in self.neighbors(*p):
  23. if self._active_owned(n):
  24. if not n in visited_from:
  25. new_buffer.append(n)
  26. if not n in visited_from:
  27. visited_from[n] = [p]
  28. else:
  29. visited_from[n].append(p)
  30. buffer = new_buffer
  31. return visited_from
  32. grid = Grid()
  33. c = grid.update_pivot_for()
  34. print("\n".join([f"{k}: {v}" for k, v in c.items()]))