def moves(point): for r, c in neighbors4(point): try: if image[r][c] == '#' and all(x >= 0 for x in (r, c)): yield (r, c) except IndexError: continue
def get_moves(point): for p in neighbors4(point): x, y = p if x < 0 or y < 0: continue o = bin(x * x + 3 * x + 2 * x * y + y + y * y + 1352).count('1') % 2 if not o: yield p
def moves_func(grid, state): location, visited = state for p in neighbors4(location): v = grid[p] if v == '#': continue if v == '.': yield (p, visited) else: yield (p, visited | {v})
def moves_func(grid, state): empty, target = state transfers = [(x, y) for x, y in neighbors4(empty) if (x, y) in grid] for n in transfers: if grid[empty][SIZE] > grid[n][USED]: yield (n, empty if n == target else target)
from common import Input from my_utils.graphs import neighbors4 DELTAS = set(neighbors4((0, 0))) def make_maze(txt): m = [] for line in txt: m.append(list(line[:-1])) return m def follow_path(maze, pos=None, delta=None): if not pos: pos = (0, maze[0].index('|')) if not delta: delta = (1, 0) steps = 1 x, y = pos dx, dy = delta letters = [] while maze[x][y] != '+': x += dx y += dy if maze[x][y] == ' ': return ''.join(letters), steps if maze[x][y] not in '+-|': letters.append(maze[x][y])