def _enhance(self, grid: InfiniteGrid[str], fill: str): result = InfiniteGrid[str]() min_x = grid.min_x - 2 max_x = grid.max_x + 3 min_y = grid.min_y - 2 max_y = grid.max_y + 3 for x in range(min_x, max_x): for y in range(min_y, max_y): coordinate = Coordinate(x, y, system=CoordinateSystem.X_RIGHT_Y_DOWN) if coordinate not in grid: grid[coordinate] = fill neighbors = coordinate.neighbors8() for neighbor in neighbors: if neighbor not in grid: grid[neighbor] = fill bin_str = f"{grid[coordinate.up().left()]}" \ f"{grid[coordinate.up()]}" \ f"{grid[coordinate.up().right()]}" \ f"{grid[coordinate.left()]}" \ f"{grid[coordinate]}" \ f"{grid[coordinate.right()]}" \ f"{grid[coordinate.down().left()]}" \ f"{grid[coordinate.down()]}" \ f"{grid[coordinate.down().right()]}" \ .replace('.', '0') \ .replace('#', '1') index = int(bin_str, 2) result[coordinate] = self._enhancement[index] return result
def _magic_grid(g: MagicGrid[int], coordinate: Coordinate): if coordinate.x == 0 and coordinate.y == 0: return 1 return sum(g[neighbor] for neighbor in coordinate.neighbors8() if neighbor in g)