def maze_successor(state): next_states = [(state[0] + 1, state[1]), (state[0], state[1] + 1), (state[0] - 1, state[1]), (state[0], state[1] - 1)] next_states = [s for s in next_states if maze_allowed(s)] return next_states def sudoku_successor(state): y, x = 10, 10 for i, s in enumerate(state): if 0 in s: (y, x) = (i, s.index(0)) break next_states = [] for j in range(1, 10): new_state = list(map(list, state)) # Convert state to a list of lists new_state[y][x] = j if sudoku_allowed((y, x, new_state)): # print(j) # print(state) next_states.append(tuple(map(tuple, new_state))) return next_states def puzzle_successor(state): return [] def queens_successor(state): return [] def maze_allowed(state): maze = [[' ', 'W', ' ', ' ', 'G'], [' ', 'W', ' ', 'W', ' '], [' ', 'W', ' ', ' ', ' '], [' ', ' ', 'W', 'W', ' '], [' ', ' ', ' ', ' ', ' ']] if state[0] >= len(maze[0]) or state[0] < 0: return False if state[1] >= len(maze) or state[1] < 0: return False return maze[state[0]][state[1]] == ' ' or maze[state[0]][state[1]] == 'G' def sudoku_allowed(state): (y, x, grid) = state """I'm making the state a triple on this one""" # (y, x, z): x,y is the coordinate and z is the value in the square # check if still inside the box if y < 0 or y >= len(grid[0]): return False if x < 0 or x >= len(grid): return False # inspect columns and rows if ([row[x] for row in grid].count(grid[y][x]) > 1) or (grid[y].count(grid[y][x]) > 1): return False # inspect minor square in teh sudoku inner_x = ((x - (x % 3)), (x - (x % 3) + 3)) inner_y = (y - (y % 3)) inner_square = grid[inner_y][inner_x[0]:inner_x[1]] + grid[inner_y + 1][inner_x[0]:inner_x[1]] + \ grid[inner_y + 2][inner_x[0]:inner_x[1]] if inner_square.count(grid[y][x]) > 1: return False return True def queens_allowed(state): return False def puzzle_allowed(state): return False