ubuntu2004
def load_puzzle(path):1with open(path) as fin:2contents = fin.read()3lines = contents.split('\n')4sudoku = []56for row in lines:7row_string = row.split()8row_int = [int(n) for n in row_string]9sudoku.append(row_int)10print("Sudoku loaded from", path,"\n")11return sudoku1213def display_puzzle(puzzle):14for i in range(len(puzzle)):15if i % 3 == 0:16print("+" + "-------+"*3)1718for j in range(len(puzzle[0])):19char = puzzle[i][j]20if char == 0:21char = "."2223if j % 3 == 0:24print("| ", end="")2526if j == 8:27print(char, "|")28else:29print(str(char) + " ", end = "")30print("+" + "-------+"*3)313233def get_next(row, col):34if col < 8:35return row,col+136elif col == 8 and row < 8:37return row+1,038elif col == 8 and row == 8:39return None,None404142def get_options(puzzle, row, col):43if puzzle[row][col] > 0:44return None4546used = []4748for i in range(0,9):49if puzzle[row][i] > 0:50used.append(puzzle[row][i])5152for i in range(0,9):53if puzzle[i][col] > 0:54used.append(puzzle[i][col])5556box_x = row // 357box_y = col // 35859for i in range(box_x * 3, box_x * 3 + 3):60for j in range(box_y * 3, box_y * 3 + 3):61if puzzle[i][j] > 0:62used.append(puzzle[i][j])63options = []64for i in range(1,10):65if i not in used:66options.append(i)67return options686970def copy_puzzle(puzzle):71new_puzzles = []72for i in range(0,len(puzzle)):73new_copy = puzzle[i].copy()74new_puzzles.append(new_copy)75return new_puzzles767778def solve(puzzle, row = 0, col = 0):79if puzzle[row][col] != 0:80next_row, next_col = get_next(row,col)81if next_row is None:82return puzzle83else:84return solve(puzzle, next_row, next_col)8586options = get_options(puzzle, row, col)8788if options == []:89return None9091for cur_opt in options:92new_puzzle = copy_puzzle(puzzle)93new_puzzle[row][col] = cur_opt94result = solve(new_puzzle, row, col)9596if result is not None:97return result98return None99100