def test_solver(): board = [ ["9", "", "", "", "", "8", "", "7", ""], ["5", "", "", "6", "7", "9", "2", "3", ""], ["1", "", "", "", "", "5", "9", "6", ""], ["8", "5", "", "7", "", "2", "6", "", ""], ["", "", "9", "8", "", "", "7", "", "2"], ["3", "7", "", "1", "", "", "", "", ""], ["", "", "4", "", "3", "", "5", "8", "6"], ["", "8", "3", "", "6", "", "", "", "4"], ["", "1", "5", "", "8", "", "", "", ""], ] solution = [ ["9", "2", "6", "3", "1", "8", "4", "7", "5"], ["5", "4", "8", "6", "7", "9", "2", "3", "1"], ["1", "3", "7", "4", "2", "5", "9", "6", "8"], ["8", "5", "1", "7", "9", "2", "6", "4", "3"], ["4", "6", "9", "8", "5", "3", "7", "1", "2"], ["3", "7", "2", "1", "4", "6", "8", "5", "9"], ["7", "9", "4", "2", "3", "1", "5", "8", "6"], ["2", "8", "3", "5", "6", "7", "1", "9", "4"], ["6", "1", "5", "9", "8", "4", "3", "2", "7"], ] sudoku = SudokuSolver(board=board) solutions = [_ for _ in sudoku.solve_all()] assert len(solutions) == 1 assert solutions[0].board == solution assert sudoku.solve().board == solution
def test_multiple_solutions(): board = [ ["", "4", "", "1"], ["1", "", "4", ""], ["", "1", "", "4"], ["4", "", "1", ""], ] solutions = [ [ ["3", "4", "2", "1"], ["1", "2", "4", "3"], ["2", "1", "3", "4"], ["4", "3", "1", "2"], ], [ ["2", "4", "3", "1"], ["1", "3", "4", "2"], ["3", "1", "2", "4"], ["4", "2", "1", "3"], ], ] sudoku = SudokuSolver(board=board) sudoku_solutions = [_ for _ in sudoku.solve_all()] assert len(solutions) == 2 assert [s.board for s in sudoku_solutions] == solutions assert sudoku.solve().board == solutions[0]
def _erase(self, board: Board) -> Board: while True: i, j = self._get_next_coords() board_c = deepcopy(board) board_c[i][j] = "" sudoku = SudokuSolver(board=board_c) if len([_ for _ in sudoku.solve_all()]) > 1: return board board = board_c
def test_incorrect_board(): board = [ ["1", "1", "1", "1"], ["", "", "", "4"], ["4", "", "3", "1"], ["3", "2", "4", ""], ] sudoku = SudokuSolver(board=board) solution = [_ for _ in sudoku.solve_all()] assert len(solution) == 0 assert sudoku.solve() is None
def test_simple_solver(): board = [ ["1", "", "2", "3"], ["2", "", "1", "4"], ["4", "", "3", "1"], ["3", "", "4", ""], ] solution = [list("1423"), list("2314"), list("4231"), list("3142")] sudoku = SudokuSolver(board=board) solutions = [_ for _ in sudoku.solve_all()] assert len(solutions) == 1 assert solutions[0].board == solution assert sudoku.solve().board == solution