import Search_Algorithms
import Sucessors
import is_goal


# Maze Problem, note, the maze if fixed in the allowed state.
# print(Search_Algorithms.BreadthFirstSearch((4, 0), Sucessors.maze_successor, is_goal.is_goal_maze))

# Sudoku
grid = ((1, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 8, 0, 0, 0, 0))

# sln = (Search_Algorithms.BreadthFirstSearch(grid, Sucessors.sudoku_successor, is_goal.is_goal_sudoku)[-1])

sln = (Search_Algorithms.DepthFirstSearch(grid, Sucessors.sudoku_successor, is_goal.is_goal_sudoku)[-1])

for rows in sln:
    print(rows)

# N Queens
board = ((False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False),
         (False, False, False, False, False, False, False, False, False))


# sln = (Search_Algorithms.BreadthFirstSearch(board, Sucessors.queens_successor, is_goal.is_goal_queens)[-1])

sln = (Search_Algorithms.DepthFirstSearch(board, Sucessors.queens_successor, is_goal.is_goal_queens)[-1])

output_tuple = tuple(tuple("Q" if value else "." for value in sln) for sln in sln)
for rows in output_tuple:
    print(rows)

#
# puzzle = ()
#
#
# print(Search_Algorithms.BreadthFirstSearch(puzzle, Sucessors.puzzle_successor, is_goal.is_goal_puzzle)[-1])