Пример #1
0
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
Пример #2
0
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]
Пример #3
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
Пример #4
0
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
Пример #5
0
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