def solveHard(grid): solveEasy(grid) if isSolved(grid) or impossiblePuzzle(grid): return grid for row in range(len(grid)): for column in range(len(grid)): if len(grid[row][column]) != 1: for number in grid[row][column]: copyGrid = deepcopy(grid) copyGrid[row][column] = [number] copyGrid = solveHard(copyGrid) if isSolved(copyGrid): return copyGrid return grid
def solve(puzzleStr): puzzle = SudokuPuzzle(puzzleStr) puzzle.grid = solveHard(puzzle.grid) puzzle.isSolved = isSolved(puzzle.grid) return puzzle