def solve(unsolved_sudoku): # https://github.com/hbldh/dlxsudoku from dlxsudoku import Sudoku from dlxsudoku.exceptions import SudokuHasMultipleSolutionsError, SudokuHasNoSolutionError, SudokuTooDifficultError s = table_to_string(unsolved_sudoku) try: sudoku = Sudoku(s) sudoku.solve() except SudokuHasNoSolutionError as e: print(e) return unsolved_sudoku pass except SudokuHasMultipleSolutionsError as e: print(e) return unsolved_sudoku pass except SudokuTooDifficultError as e: print(e) return unsolved_sudoku else: return string_to_table(sudoku.to_oneliner())
from dlxsudoku import Sudoku f = open('sudoku.txt', 'r') ret = 0 for l in f: s = Sudoku(l) s.solve() s = s.to_oneliner() ret += int(s[0:3]) print ret
def AttemptSudokuSolve(InputQueue, ProcessedDigits, FinalImage): loaded_model = joblib.load('finalized_sudoku_model.sav') from dlxsudoku import Sudoku font = cv2.FONT_HERSHEY_SIMPLEX result_old = np.zeros(81) result_really_old = result_old result = np.zeros(81) while True: gray = InputQueue.get() img, cropped, digits = cw.extract_sudoku(gray) boardFound = 1 result_really_really_old = result_really_old result_really_old = result_old result_old = result sleep(0.05) ProcessedDigits.put(img) result = loaded_model.predict(digits) resultList = (result_old, result_really_old, result_really_really_old) for resul in resultList: for i in result: if result[i] == 10: if resul[i] != 10: #print('correction2') print( str(result[i]) + " changed to " + str(int(resul[i]))) result[i] = int(resul[i]) temp = 0 for i in result: if i == 10: temp = temp + 1 result[i] = 0 if temp >= 6: continue res = "" grid = np.zeros((9, 9), dtype='int') grid = result.reshape(9, 9) #Getting the set of numbers within a number's group------------------------------------ for re in result: if re == 10: boardFound = 0 break else: res += str(re) if boardFound == 1: #print(res) try: #start = time.time() s1 = Sudoku(res) s1.solve(verbose=False, allow_brute_force=True) #print("YAY!") stringlist = s1.to_oneliner() charlist = list(stringlist) results = list(map(int, charlist)) #print(results) y = cropped.shape[0] cell_Spacing = y // 9 posx = cell_Spacing // 2 - 4 posy = cell_Spacing // 2 + 6 for i in range(81): if results[i] != result[i]: cropped = cv2.putText(cropped, charlist[i], (posx, posy), font, 0.6, (0, 0, 255), 2, cv2.LINE_AA) if posx + cell_Spacing >= y: posy = posy + cell_Spacing posx = cell_Spacing // 2 - 4 else: posx = posx + cell_Spacing FinalImage.put(cropped) except: pass #print("too many solutions") else: pass