Esempio n. 1
0
    def test_valid_grid(self):
        grid = [[7, 8, 4, 1, 5, 9, 3, 2, 6], [5, 3, 9, 6, 7, 2, 8, 4, 1],
                [6, 1, 2, 4, 3, 8, 7, 5, 9], [9, 2, 8, 7, 1, 5, 4, 6, 3],
                [3, 5, 7, 8, 4, 6, 1, 9, 2], [4, 6, 1, 9, 2, 3, 5, 8, 7],
                [8, 7, 6, 3, 9, 4, 2, 1, 5], [2, 4, 3, 5, 6, 1, 9, 7, 8],
                [1, 9, 5, 2, 8, 7, 6, 3, 4]]

        solver = SudokuSolver(grid)
        self.assertTrue(solver.is_valid())
Esempio n. 2
0
    def test_invalid_grid(self):
        grid = [[8, 8, 4, 1, 5, 9, 2, 2, 6], [5, 2, 9, 6, 8, 2, 8, 4, 1],
                [6, 1, 2, 4, 2, 8, 8, 5, 9], [9, 2, 8, 8, 1, 5, 4, 6, 2],
                [2, 5, 8, 8, 4, 6, 1, 9, 2], [4, 6, 1, 9, 2, 2, 5, 8, 8],
                [8, 8, 6, 2, 9, 4, 2, 1, 5], [2, 4, 2, 5, 6, 1, 9, 8, 8],
                [1, 9, 5, 2, 8, 8, 6, 2, 4]]

        solver = SudokuSolver(grid)
        self.assertEqual(solver.is_valid(), False)
Esempio n. 3
0
    def test_invalid_grid2(self):
        grid = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 1, 5, 6, 4, 8, 9, 7],
                [3, 1, 2, 6, 4, 5, 9, 7, 8], [4, 5, 6, 7, 8, 9, 1, 2, 3],
                [5, 6, 4, 8, 9, 7, 2, 3, 1], [6, 4, 5, 9, 7, 8, 3, 1, 2],
                [7, 8, 9, 1, 2, 3, 4, 5, 6], [8, 9, 7, 2, 3, 1, 5, 6, 4],
                [9, 7, 8, 3, 1, 2, 6, 4, 5]]

        solver = SudokuSolver(grid)
        self.assertEqual(solver.is_valid(), False)
Esempio n. 4
0
 def solve_grid(self):
     self.error_label = None
     #check for edge cases:
     # -input wrong(not int, not 0 to 9)
     try:
         counter = 0
         for i in range(9):
             for j in range(9):
                 tmp = int(self.cells[i][j].get("1.0", 'end-1c'))
                 if tmp > 9:
                     self.error_label = Label(
                         self.window,
                         text=
                         "The sudoku input was not valid (not a number from 0 to 9)."
                     ).place(x=10, y=400)
                     return
                 if tmp != 0:
                     counter += 1
         if counter < 10:
             warning = Label(
                 self.window,
                 text=
                 "There are very few given numbers. Computing all possible solutions is not feasible\non generic computers."
             ).place(x=10, y=400)
             return
     except ValueError:
         self.error_label = Label(
             self.window,
             text="The sudoku input was not valid (not a number).").place(
                 x=10, y=400)
         return
     # -not enough filled in
     #create a Grid object with all values from the gui grid
     grid = Grid()
     for i in range(9):
         for j in range(9):
             # get each cell, convert string to int
             grid.set_cell(i, j, int(self.cells[i][j].get("1.0", 'end-1c')))
     #create Sudoku Solver object and calculate solution
     solver = SudokuSolver(grid)
     #check if sudoku is valid
     if solver.is_correct() is False:
         self.error_label = Label(
             self.window,
             text="The given input is not a valid sudoku.").place(x=10,
                                                                  y=400)
         return
     solver.solve()
     # display solution in new window
     if len(solver.get_solutions()) == 0:
         warning = Label(
             self.window,
             text="There are no solutions to the given sudoku.").place(
                 x=10, y=400)
     else:
         self.display_solutions(solver)
Esempio n. 5
0
 def action(self):
     board = [[int(window.buttons[j][i].get_text()) for i in range(9)]
              for j in range(9)]
     print(board)
     s = SudokuSolver(board)
     res = s.solve()
     if res:
         for i in range(9):
             for j in range(9):
                 window.buttons[i][j].setText(str(res[i][j]))
     else:
         print("No solutions.")
Esempio n. 6
0
    def __init__(self):

        os.environ['SDL_VIDEO_CENTERED'] = '1'
        pygame.init()

        pygame.display.set_caption(CAPTION)
        self._screen = pygame.display.set_mode(RESOLUTION)
        self._clock = pygame.time.Clock()
        self._grid_font = pygame.font.Font(FONT_NAME, GRID_FONT_SIZE)
        self._help_font = pygame.font.Font(FONT_NAME, HELP_FONT_SIZE)

        # board settings
        self._board_pos = (RESOLUTION[0] - BOARD_SIZE) // 2, BOARD_Y
        self._grid_size = BOARD_SIZE // 9

        # calculate grid lines' coordinates
        grid_xs = [
            x * self._grid_size + self._board_pos[0] for x in xrange(10)
        ]
        grid_ys = [
            y * self._grid_size + self._board_pos[1] for y in xrange(10)
        ]

        vertical_lines_top = [(x, self._board_pos[1]) for x in grid_xs]
        vertical_lines_bottom = [(x, self._board_pos[1] + BOARD_SIZE - 4)
                                 for x in grid_xs]
        horizontal_lines_top = [(self._board_pos[0], y) for y in grid_ys]
        horizontal_lines_bottom = [(self._board_pos[0] + BOARD_SIZE - 4, y)
                                   for y in grid_ys]

        self._vertical_lines = zip(vertical_lines_top, vertical_lines_bottom)
        self._horizontal_lines = zip(horizontal_lines_top,
                                     horizontal_lines_bottom)

        # set grids
        self._grids = [
            Grid(grid_xs[j], grid_ys[i], self._grid_size, self._grid_size)
            for j in xrange(9) for i in xrange(9)
        ]
        self._reset_grids()

        # selection
        self._selected_grid = None

        # solver
        self._solver = SudokuSolver()
Esempio n. 7
0
def main():
    # # Easy
    # row1 = '5,-,-,-,-,-,-,-,1,'
    # row2 = '-,7,-,-,8,-,9,-,-,'
    # row3 = '8,-,9,-,-,-,-,-,6,'
    # row4 = '6,8,-,2,-,5,7,4,-,'
    # row5 = '7,-,-,6,-,8,-,-,3,'
    # row6 = '-,1,5,3,-,9,-,6,8,'
    # row7 = '3,-,-,-,-,-,6,-,7,'
    # row8 = '-,-,6,-,3,-,-,1,-,'
    # row9 = '1,-,-,-,-,-,-,-,4'
    # Blank
    # row1 = '-,-,-,-,-,-,-,-,-,'
    # row2 = '-,-,-,-,-,-,-,-,-,'
    # row3 = '-,-,-,-,-,-,-,-,-,'
    # row4 = '-,-,-,-,-,-,-,-,-,'
    # row5 = '-,-,-,-,-,-,-,-,-,'
    # row6 = '-,-,-,-,-,-,-,-,-,'
    # row7 = '-,-,-,-,-,-,-,-,-,'
    # row8 = '-,-,-,-,-,-,-,-,-,'
    # row9 = '-,-,-,-,-,-,-,-,-'
    row1 = '8,-,-,-,-,-,-,-,-,'
    row2 = '-,-,3,6,-,-,-,-,-,'
    row3 = '-,7,-,-,9,-,2,-,-,'
    row4 = '-,5,-,-,-,7,-,-,-,'
    row5 = '-,-,-,-,4,5,7,-,-,'
    row6 = '-,-,-,1,-,-,-,3,-,'
    row7 = '-,-,1,-,-,-,-,6,8,'
    row8 = '-,-,8,5,-,-,-,1,-,'
    row9 = '-,9,-,-,-,-,4,-,-'
    puzzle = row1 + row2 + row3 + row4 + row5 + row6 + row7 + row8 + row9
    sg = SudokuGrid(puzzle.split(','))
    solver = SudokuSolver(sg)
    solver.solve_puzzle()
    print(solver.grid)
    print(solver.puzzle_solved())
    print(solver.count, "Iterations")
Esempio n. 8
0

t = Tester()

i = [
    [5, 3, 0, 0, 7, 0, 0, 0, 0],
    [6, 0, 0, 1, 9, 5, 0, 0, 0],
    [0, 9, 8, 0, 0, 0, 0, 6, 0],
    [8, 0, 0, 0, 6, 0, 0, 0, 3],
    [4, 0, 0, 8, 0, 3, 0, 0, 1],
    [7, 0, 0, 0, 2, 0, 0, 0, 6],
    [0, 6, 0, 0, 0, 0, 2, 8, 0],
    [0, 0, 0, 4, 1, 9, 0, 0, 5],
    [0, 0, 0, 0, 8, 0, 0, 7, 9],
]
t.test(i, True, SudokuSolver().solve(i))

i = [
    [1, 2, 3, 4, 5, 6, 7, 8, 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],
    [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],
]
t.test(i, True, SudokuSolver().solve(i))

i = [
Esempio n. 9
0
example_puzzle = "010020300004005060070000004006800070000900002050017000400006050000400906008000000"
hardest_puzzle = "800000000003600000070090200050007000000045700000100030001000068008500010090000400"

from sudoku import SudokuSolver

solver = SudokuSolver(hardest_puzzle)
solver.solve()
solver.print_board()
solver.print_statistics()
Esempio n. 10
0
    #Stack length: 56
    ellie_0 = numpy.array([
            [0, 0, 0, 0, 0, 0, 4, 2, 0],
            [0, 0, 0, 0, 0, 0, 0, 0, 1],
            [8, 9, 4, 0, 0, 0, 0, 0, 6],
            [0, 6, 0, 2, 4, 0, 0, 0, 0],
            [1, 0, 0, 5, 0, 8, 0, 0, 0],
            [0, 0, 8, 0, 7, 9, 0, 0, 0],
            [0, 4, 0, 8, 0, 0, 3, 0, 0],
            [5, 0, 2, 0, 0, 7, 6, 0, 0],
            [0, 8, 0, 0, 6, 0, 5, 0, 0]
            ])

    hardest = numpy.array([
            [8, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 3, 6, 0, 0, 0, 0, 0],
            [0, 7, 0, 0, 9, 0, 2, 0, 0],
            [0, 5, 0, 0, 0, 7, 0, 0, 0],
            [0, 0, 0, 0, 4, 5, 7, 0, 0],
            [0, 0, 0, 1, 0, 0, 0, 3, 0],
            [0, 0, 1, 0, 0, 0, 0, 6, 8],
            [0, 0, 8, 5, 0, 0, 0, 1, 0],
            [0, 9, 0, 0, 0, 0, 4, 0, 0]
        ])
    
    solver = SudokuSolver(norvig_0_19)
    start_time = time.time()
    solver.solve()
    print(solver)
    print("--- %s seconds ---" % (time.time() - start_time))