示例#1
0
 def test_3_sudoku_of_9(self):
     board = [
         [9, 0, 5, 0, 0, 0, 0, 0, 8],
         [4, 0, 0, 5, 7, 0, 1, 0, 6],
         [0, 2, 7, 6, 0, 0, 0, 4, 0],
         [0, 9, 6, 0, 0, 3, 5, 1, 2],
         [7, 0, 4, 0, 1, 0, 3, 0, 0],
         [2, 1, 0, 9, 8, 0, 0, 0, 4],
         [0, 8, 1, 0, 0, 4, 0, 9, 0],
         [3, 0, 0, 8, 0, 0, 0, 5, 1],
         [0, 0, 2, 0, 0, 7, 0, 6, 0]
     ]
     assert ex8.solve_sudoku(board) is True
     checking_full_sud(board)
     not_changed_save_places([
         [9, 0, 5, 0, 0, 0, 0, 0, 8],
         [4, 0, 0, 5, 7, 0, 1, 0, 6],
         [0, 2, 7, 6, 0, 0, 0, 4, 0],
         [0, 9, 6, 0, 0, 3, 5, 1, 2],
         [7, 0, 4, 0, 1, 0, 3, 0, 0],
         [2, 1, 0, 9, 8, 0, 0, 0, 4],
         [0, 8, 1, 0, 0, 4, 0, 9, 0],
         [3, 0, 0, 8, 0, 0, 0, 5, 1],
         [0, 0, 2, 0, 0, 7, 0, 6, 0]
     ], board)
示例#2
0
def test_2_sudoku_of_4():
    board = [[3, 0, 4, 0], [0, 1, 0, 3], [2, 3, 0, 0], [1, 0, 0, 2]]

    assert ex8.solve_sudoku(board) is True
    checking_full_sud(board)
    not_changed_save_places(
        [[3, 0, 4, 0], [0, 1, 0, 3], [2, 3, 0, 0], [1, 0, 0, 2]], board)
示例#3
0
def test_2_sudoku_of_16():
    board = [[0, 15, 0, 1, 0, 2, 10, 14, 12, 0, 0, 0, 0, 0, 0, 0],
             [0, 6, 3, 16, 12, 0, 8, 4, 14, 15, 1, 0, 2, 0, 0, 0],
             [14, 0, 9, 7, 11, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0],
             [4, 13, 2, 12, 0, 0, 0, 0, 6, 0, 0, 0, 0, 15, 0, 0],
             [0, 0, 0, 0, 14, 1, 11, 7, 3, 5, 10, 0, 0, 8, 0, 12],
             [3, 16, 0, 0, 2, 4, 0, 0, 0, 14, 7, 13, 0, 0, 5, 15],
             [11, 0, 5, 0, 0, 0, 0, 0, 0, 9, 4, 0, 0, 6, 0, 0],
             [0, 0, 0, 0, 13, 0, 16, 5, 15, 0, 0, 12, 0, 0, 0, 0],
             [0, 0, 0, 0, 9, 0, 1, 12, 0, 8, 3, 10, 11, 0, 15, 0],
             [2, 12, 0, 11, 0, 0, 14, 3, 5, 4, 0, 0, 0, 0, 9, 0],
             [6, 3, 0, 4, 0, 0, 13, 0, 0, 11, 9, 1, 0, 12, 16, 2],
             [0, 0, 10, 9, 0, 0, 0, 0, 0, 0, 12, 0, 8, 0, 6, 7],
             [12, 8, 0, 0, 16, 0, 0, 10, 0, 13, 0, 0, 0, 5, 0, 0],
             [5, 0, 0, 0, 3, 0, 4, 6, 0, 1, 15, 0, 0, 0, 0, 0],
             [0, 9, 1, 6, 0, 14, 0, 11, 0, 0, 2, 0, 0, 0, 10, 8],
             [0, 14, 0, 0, 0, 13, 9, 0, 4, 12, 11, 8, 0, 0, 2, 0]]

    assert ex8.solve_sudoku(board) is True
    assert board == [[8, 15, 11, 1, 6, 2, 10, 14, 12, 7, 13, 3, 16, 9, 4, 5],
                     [10, 6, 3, 16, 12, 5, 8, 4, 14, 15, 1, 9, 2, 11, 7, 13],
                     [14, 5, 9, 7, 11, 3, 15, 13, 8, 2, 16, 4, 12, 10, 1, 6],
                     [4, 13, 2, 12, 1, 9, 7, 16, 6, 10, 5, 11, 3, 15, 8, 14],
                     [9, 2, 6, 15, 14, 1, 11, 7, 3, 5, 10, 16, 4, 8, 13, 12],
                     [3, 16, 12, 8, 2, 4, 6, 9, 11, 14, 7, 13, 10, 1, 5, 15],
                     [11, 10, 5, 13, 8, 12, 3, 15, 1, 9, 4, 2, 7, 6, 14, 16],
                     [1, 4, 7, 14, 13, 10, 16, 5, 15, 6, 8, 12, 9, 2, 3, 11],
                     [13, 7, 16, 5, 9, 6, 1, 12, 2, 8, 3, 10, 11, 14, 15, 4],
                     [2, 12, 8, 11, 7, 16, 14, 3, 5, 4, 6, 15, 1, 13, 9, 10],
                     [6, 3, 14, 4, 10, 15, 13, 8, 7, 11, 9, 1, 5, 12, 16, 2],
                     [15, 1, 10, 9, 4, 11, 5, 2, 13, 16, 12, 14, 8, 3, 6, 7],
                     [12, 8, 4, 3, 16, 7, 2, 10, 9, 13, 14, 6, 15, 5, 11, 1],
                     [5, 11, 13, 2, 3, 8, 4, 6, 10, 1, 15, 7, 14, 16, 12, 9],
                     [7, 9, 1, 6, 15, 14, 12, 11, 16, 3, 2, 5, 13, 4, 10, 8],
                     [16, 14, 15, 10, 5, 13, 9, 1, 4, 12, 11, 8, 6, 7, 2, 3]]
示例#4
0
 def test_2_sudoku_of_9(self):
     board = [
         [0, 0, 9, 0, 2, 0, 0, 3, 6],
         [0, 8, 5, 0, 0, 0, 0, 1, 7],
         [0, 0, 0, 0, 5, 7, 2, 0, 4],
         [5, 0, 0, 0, 0, 2, 0, 6, 0],
         [0, 6, 4, 3, 0, 8, 1, 2, 0],
         [0, 7, 0, 1, 0, 0, 0, 0, 9],
         [3, 0, 1, 7, 8, 0, 0, 0, 0],
         [4, 9, 0, 0, 0, 0, 8, 5, 0],
         [6, 2, 0, 0, 3, 0, 4, 0, 0]
     ]
     assert ex8.solve_sudoku(board) is True
     checking_full_sud(board)
     not_changed_save_places([
         [0, 0, 9, 0, 2, 0, 0, 3, 6],
         [0, 8, 5, 0, 0, 0, 0, 1, 7],
         [0, 0, 0, 0, 5, 7, 2, 0, 4],
         [5, 0, 0, 0, 0, 2, 0, 6, 0],
         [0, 6, 4, 3, 0, 8, 1, 2, 0],
         [0, 7, 0, 1, 0, 0, 0, 0, 9],
         [3, 0, 1, 7, 8, 0, 0, 0, 0],
         [4, 9, 0, 0, 0, 0, 8, 5, 0],
         [6, 2, 0, 0, 3, 0, 4, 0, 0]
     ], board)
示例#5
0
 def test_1_sudoku_of_9(self):
     board = [
         [0, 5, 2, 9, 0, 1, 3, 6, 0],
         [0, 8, 0, 0, 7, 0, 0, 0, 2],
         [0, 0, 4, 0, 0, 0, 0, 7, 1],
         [4, 1, 0, 0, 5, 9, 0, 0, 0],
         [0, 2, 0, 0, 6, 0, 0, 5, 0],
         [0, 0, 0, 2, 3, 0, 0, 8, 4],
         [5, 7, 0, 0, 0, 0, 6, 0, 0],
         [2, 0, 0, 0, 9, 0, 0, 1, 0],
         [0, 6, 9, 7, 0, 2, 8, 4, 0]
     ]
     assert ex8.solve_sudoku(board) is True
     checking_full_sud(board)
     not_changed_save_places([
         [0, 5, 2, 9, 0, 1, 3, 6, 0],
         [0, 8, 0, 0, 7, 0, 0, 0, 2],
         [0, 0, 4, 0, 0, 0, 0, 7, 1],
         [4, 1, 0, 0, 5, 9, 0, 0, 0],
         [0, 2, 0, 0, 6, 0, 0, 5, 0],
         [0, 0, 0, 2, 3, 0, 0, 8, 4],
         [5, 7, 0, 0, 0, 0, 6, 0, 0],
         [2, 0, 0, 0, 9, 0, 0, 1, 0],
         [0, 6, 9, 7, 0, 2, 8, 4, 0]
     ], board)
示例#6
0
def test_sudoku_of_empty_9():
    board = [[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, 0, 0, 0, 0, 0, 0]]
    assert ex8.solve_sudoku(board) is True
    checking_full_sud(board)
示例#7
0
def test_2_sudoku_of_bad_9():
    board = [[0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 2, 3, 4, 0, 6, 7, 8, 0],
             [0, 0, 0, 0, 5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
             [0, 0, 0, 0, 9, 0, 0, 0, 5], [0, 0, 0, 0, 0, 0, 0, 0, 9],
             [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]]
    assert ex8.solve_sudoku(board) is False
    not_changed_at_all(
        [[0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 2, 3, 4, 0, 6, 7, 8, 0],
         [0, 0, 0, 0, 5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 9, 0, 0, 0, 5], [0, 0, 0, 0, 0, 0, 0, 0, 9],
         [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]], board)
示例#8
0
def test_1_sudoku_of_bad_9():
    board = [[6, 5, 2, 9, 0, 1, 3, 0, 0], [0, 8, 0, 6, 7, 0, 0, 0, 2],
             [0, 0, 4, 0, 0, 6, 0, 7, 1], [4, 1, 0, 0, 5, 9, 0, 6, 0],
             [0, 2, 0, 0, 6, 0, 0, 5, 0], [0, 0, 6, 2, 3, 0, 0, 8, 4],
             [5, 7, 0, 0, 0, 0, 6, 0, 0], [2, 0, 0, 0, 9, 0, 0, 1, 0],
             [0, 6, 9, 7, 0, 2, 8, 4, 0]]
    assert ex8.solve_sudoku(board) is False
    not_changed_at_all(
        [[6, 5, 2, 9, 0, 1, 3, 0, 0], [0, 8, 0, 6, 7, 0, 0, 0, 2],
         [0, 0, 4, 0, 0, 6, 0, 7, 1], [4, 1, 0, 0, 5, 9, 0, 6, 0],
         [0, 2, 0, 0, 6, 0, 0, 5, 0], [0, 0, 6, 2, 3, 0, 0, 8, 4],
         [5, 7, 0, 0, 0, 0, 6, 0, 0], [2, 0, 0, 0, 9, 0, 0, 1, 0],
         [0, 6, 9, 7, 0, 2, 8, 4, 0]], board)
示例#9
0
def test_4_sudoku_of_9():
    board = [[0, 0, 0, 7, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0],
             [0, 0, 0, 4, 3, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 6],
             [0, 0, 0, 5, 0, 9, 0, 0, 0], [0, 0, 0, 0, 0, 0, 4, 1, 8],
             [0, 0, 0, 0, 8, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 5, 0],
             [0, 4, 0, 0, 0, 0, 3, 0, 0]]
    assert ex8.solve_sudoku(board) is True
    checking_full_sud(board)
    not_changed_save_places(
        [[0, 0, 0, 7, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 4, 3, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 6],
         [0, 0, 0, 5, 0, 9, 0, 0, 0], [0, 0, 0, 0, 0, 0, 4, 1, 8],
         [0, 0, 0, 0, 8, 1, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 5, 0],
         [0, 4, 0, 0, 0, 0, 3, 0, 0]], board)
示例#10
0
 def test_2_sudoku_of_bad_4(self):
     board = [
         [1, 2, 3, 0],
         [0, 0, 0, 4],
         [0, 0, 0, 0],
         [0, 0, 0, 0]
     ]
     assert ex8.solve_sudoku(board) is False
     not_changed_at_all([
         [1, 2, 3, 0],
         [0, 0, 0, 4],
         [0, 0, 0, 0],
         [0, 0, 0, 0]
     ], board)
示例#11
0
 def test_1_sudoku_of_bad_4(self):
     board = [
         [1, 2, 3, 0],
         [3, 0, 0, 4],
         [4, 0, 0, 2],
         [2, 1, 4, 3]
     ]
     assert ex8.solve_sudoku(board) is False
     not_changed_at_all([
         [1, 2, 3, 0],
         [3, 0, 0, 4],
         [4, 0, 0, 2],
         [2, 1, 4, 3]
     ], board)
示例#12
0
 def test_1_sudoku_of_4(self):
     board = [
         [1, 2, 3, 4],
         [3, 0, 0, 1],
         [4, 0, 0, 2],
         [2, 1, 4, 3]
     ]
     assert ex8.solve_sudoku(board) is True
     checking_full_sud(board)
     not_changed_save_places([
         [1, 2, 3, 4],
         [3, 0, 0, 1],
         [4, 0, 0, 2],
         [2, 1, 4, 3]
     ], board)
示例#13
0
def test_sudoku_of_fill_one():
    board = [[1]]
    assert ex8.solve_sudoku(board) is True
    assert board == [[1]]
示例#14
0
        col_sublist = []
        for row in range(len(board)):
            col_sublist.append(board[row][col])
        col_lst.append(col_sublist)
    return col_lst


def square_board(board, row, col):
    square_len = int(math.sqrt(len(board)))
    square_board = list()
    start_row = square_len * (row // square_len)
    start_col = square_len * (col // square_len)
    for row in board[start_row:start_row + square_len]:
        square_board += (row[start_col:start_col + square_len])
    return square_board


def did_not_change_at_all(start_board, final_board):
    assert start_board == final_board


def did_not_change_start_numbers(start_board, final_board):
    for row in range(len(start_board)):
        for col in range(len(start_board)):
            if start_board[row][col] != 0:
                assert start_board[row][col] == final_board[row][col]


board = [[4, 0, 0, 0], [0, 2, 4, 3], [3, 0, 0, 0], [2, 0, 3, 0]]
ex8.solve_sudoku(board)
check_solution(board)
示例#15
0
 def test_sudoku_of_empty_one(self):
     board = [[0]]
     assert ex8.solve_sudoku(board) is True
     assert board == [[1]]