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())
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)
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)
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)
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.")
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()
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")
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 = [
example_puzzle = "010020300004005060070000004006800070000900002050017000400006050000400906008000000" hardest_puzzle = "800000000003600000070090200050007000000045700000100030001000068008500010090000400" from sudoku import SudokuSolver solver = SudokuSolver(hardest_puzzle) solver.solve() solver.print_board() solver.print_statistics()
#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))