Ejemplo n.º 1
0
def test_exceptions():
    try:
        s = SudokuBoard([[],[],[]])
    except Exception as e:
        assert type(e) == InvalidSudokuException

    try:
        s = SudokuBoard([[1,2,3,4,5,6,7,8,9],[1,2,3],[],[],[],[],[],[],[]])
    except Exception as e:
        assert type(e) == InvalidSudokuException

    try:
        SudokuBoard.subgridize([[],[]])
    except Exception as e:
        assert type(e) == ValueError

    try:
        SudokuBoard([[1,1,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None],
                            [None,None,None,None,None,None,None,None,None]]
                            )
    except Exception as e:
        assert type(e) == InvalidSudokuException
        
    print("Passed exceptions test")
Ejemplo n.º 2
0
def test_hard_sudoku():
    global hard_sudoku
    hard_sudoku = SudokuBoard([[None,3   ,None, 2   ,None,None, None,None,6   ],
                               [None,None,None, None,None,9   , None,None,4   ],
                               [7   ,6   ,None, None,None,None, None,None,None],
                               
                               [None,None,None, None,5   ,None, 7   ,None,None],
                               [None,None,None, None,None,1   , 8   ,6   ,None],
                               [None,5   ,None, 4   ,8   ,None, None,9   ,None],
                               
                               [8   ,None,None, None,None,None, None,None,None],
                               [None,None,None, None,7   ,6   , None,None,None,],
                               [None,7   ,5   , None,None,8   , 1   ,None,None]])

    assert hard_sudoku.solved().rows == [[4, 3, 8,  2, 1, 5,  9, 7, 6],
                                         [5, 2, 1,  7, 6, 9,  3, 8, 4],
                                         [7, 6, 9,  8, 3, 4,  5, 1, 2],
                                    
                                         [9, 8, 2,  6, 5, 3,  7, 4, 1],
                                         [3, 4, 7,  9, 2, 1,  8, 6, 5],
                                         [1, 5, 6,  4, 8, 7,  2, 9, 3],
                                    
                                         [8, 1, 4,  5, 9, 2,  6, 3, 7],
                                         [2, 9, 3,  1, 7, 6,  4, 5, 8],
                                         [6, 7, 5,  3, 4, 8,  1, 2, 9]]

    print("Hard sudoku solving test passed")
Ejemplo n.º 3
0
def test_solved_sudoku():
    solved = SudokuBoard([[7,3,5, 6,1,4, 8,9,2],
                         [8,4,2, 9,7,3, 5,6,1],
                         [9,6,1, 2,8,5, 3,7,4],
                         
                         [2,8,6, 3,4,9, 1,5,7],
                         [4,1,3, 8,5,7, 9,2,6],
                         [5,7,9, 1,2,6, 4,3,8],
                         
                         [1,5,7, 4,9,2, 6,8,3],
                         [6,9,4, 7,3,8, 2,1,5],
                         [3,2,8, 5,6,1, 7,4,9]])

    assert solved.is_complete() == True
    assert solved.is_solved() == True

    print("Solved sudoku functionality passed")
Ejemplo n.º 4
0
def test_simple_sudoku():
    global s
    assert SudokuBoard.subgridize([[1,1,1,2,2,2,3,3,3],
                       [1,1,1,2,2,2,3,3,3],
                       [1,1,1,2,2,2,3,3,3]]) == [[1, 1, 1, 1, 1, 1, 1, 1, 1],
                                                 [2, 2, 2, 2, 2, 2, 2, 2, 2],
                                                 [3, 3, 3, 3, 3, 3, 3, 3, 3]]

    s = SudokuBoard([[8,   7,   6,     9,   None,None,  None,None,None],
                     [None,1,   None,  None,None,6,     None,None,None],
                     [None,4,   None,  3,   None,5,     8,   None,None],
                     
                     [4,   None,None,  None,None,None,  2,   1,   None],
                     [None,9,   None,  5,   None,None,  None,None,None],
                     [None,5,   None,  None,4,   None,  3,   None,   6],
                     
                     [None,2,   9,     None,None,None,  None,None,8   ],
                     [None,None,4,     6,   9,   None,  1,   7,   3   ],
                     [None,None,None,  None,None,1,     None,None,4   ]])
    
    assert s.subgrids == [[8, 7, 6, None, 1, None, None, 4, None],
                            [9, None, None, None, None, 6, 3, None, 5],
                            [None, None, None, None, None, None, 8, None, None],
                            [4, None, None, None, 9, None, None, 5, None],
                            [None, None, None, 5, None, None, None, 4, None],
                            [2, 1, None, None, None, None, 3, None, 6],
                            [None, 2, 9, None, None, 4, None, None, None],
                            [None, None, None, 6, 9, None, None, None, 1],
                            [None, None, 8, 1, 7, 3, None, None, 4]]

    assert s.cols == [[8, None, None, 4, None, None, None, None, None],
                        [7, 1, 4, None, 9, 5, 2, None, None],
                        [6, None, None, None, None, None, 9, 4, None],
                        [9, None, 3, None, 5, None, None, 6, None],
                        [None, None, None, None, None, 4, None, 9, None],
                        [None, 6, 5, None, None, None, None, None, 1],
                        [None, None, 8, 2, None, 3, None, 1, None],
                        [None, None, None, 1, None, None, None, 7, None],
                        [None, None, None, None, None, 6, 8, 3, 4]]

    assert s.possibilities() == {(0, 4): [1, 2],
                               (0, 5): [2, 4],
                               (0, 6): [4, 5],
                               (0, 7): [2, 3, 4, 5],
                               (0, 8): [1, 2, 5],
                               (1, 0): [2, 3, 5, 9],
                               (1, 2): [2, 3, 5],
                               (1, 3): [2, 4, 7, 8],
                               (1, 4): [2, 7, 8],
                               (1, 6): [4, 5, 7, 9],
                               (1, 7): [2, 3, 4, 5, 9],
                               (1, 8): [2, 5, 7, 9],
                               (2, 0): [2, 9],
                               (2, 2): [2],
                               (2, 4): [1, 2, 7],
                               (2, 7): [2, 6, 9],
                               (2, 8): [1, 2, 7, 9],
                               (3, 1): [3, 6, 8],
                               (3, 2): [3, 7, 8],
                               (3, 3): [7, 8],
                               (3, 4): [3, 6, 7, 8],
                               (3, 5): [3, 7, 8, 9],
                               (3, 8): [5, 7, 9],
                               (4, 0): [1, 2, 3, 6, 7],
                               (4, 2): [1, 2, 3, 7, 8],
                               (4, 4): [1, 2, 3, 6, 7, 8],
                               (4, 5): [2, 3, 7, 8],
                               (4, 6): [4, 7],
                               (4, 7): [4, 8],
                               (4, 8): [7],
                               (5, 0): [1, 2, 7],
                               (5, 2): [1, 2, 7, 8],
                               (5, 3): [1, 2, 7, 8],
                               (5, 5): [2, 7, 8, 9],
                               (5, 7): [8, 9],
                               (6, 0): [1, 3, 5, 6, 7],
                               (6, 3): [4, 7],
                               (6, 4): [3, 5, 7],
                               (6, 5): [3, 4, 7],
                               (6, 6): [5, 6],
                               (6, 7): [5, 6],
                               (7, 0): [5],
                               (7, 1): [8],
                               (7, 5): [2, 8],
                               (8, 0): [3, 5, 6, 7],
                               (8, 1): [3, 6, 8],
                               (8, 2): [3, 5, 7, 8],
                               (8, 3): [2, 7, 8],
                               (8, 4): [2, 3, 5, 7, 8],
                               (8, 6): [5, 6, 9],
                               (8, 7): [2, 5, 6, 9]}

    assert s.solved().rows == [[8, 7, 6,  9, 1, 4,  5, 3, 2],
                               [3, 1, 5,  2, 8, 6,  7, 4, 9],
                               [9, 4, 2,  3, 7, 5,  8, 6, 1],
                             
                               [4, 3, 8,  7, 6, 9,  2, 1, 5],
                               [6, 9, 1,  5, 2, 3,  4, 8, 7],
                               [2, 5, 7,  1, 4, 8,  3, 9, 6],
                             
                               [1, 2, 9,  4, 3, 7,  6, 5, 8],
                               [5, 8, 4,  6, 9, 2,  1, 7, 3],
                               [7, 6, 3,  8, 5, 1,  9, 2, 4]]
    
    assert s.is_complete() == False
    assert s.is_solved() == False

    assert s.possible_numbers(1, 0) == [2, 3, 5, 9]
    assert s.possible_numbers(7, 5) == [2, 8]
    assert s.possible_numbers(7, 1) == [8]

    assert s.is_valid() == True

    print("Basic functionality passed")
Ejemplo n.º 5
0
 def setUp(self):
     self.board = SudokuBoard(self._input)
Ejemplo n.º 6
0
 def test_get_status(self):
     solved = SudokuBoard(self._solved)
     self.assertEquals(self.board.get_status(), (32, 441))
     self.assertEquals(solved.get_status(), (81, 0))
Ejemplo n.º 7
0
 def test_solved(self):
     solved = SudokuBoard(self._solved)
     self.assertTrue(solved.solved())
     self.assertFalse(self.board.solved())
Ejemplo n.º 8
0
 def create_variables(self):
     self.vars = [tk.StringVar() for _ in range(81)]
     for i in range(81):
         self.vars[i].set('')
     self.board = SudokuBoard([['' for _ in range(9)] for _ in range(9)])
Ejemplo n.º 9
0
import boards
import sys
import logging
from solver import solve, SudokuBoard
logging.basicConfig(level=logging.WARN)

for n, b in boards.__dict__.iteritems():
    if not n.startswith('board'):
        continue
    print "\n\n%s" % n
    board = solve(SudokuBoard(b))
    print board
    print "Game won!" if board else "Lost!"
Ejemplo n.º 10
0
def solve_sudoku(rows):
    return SudokuBoard(rows).solved().rows