예제 #1
0
    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
예제 #2
0
파일: d3.py 프로젝트: Jnesselr/AdventOfCode
        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)