def main(): complete=False count=0 itercount=0 while complete==False and count<=10: Sudoku_validCheck.validChecker(Sudoku_board.board.tileList()) if Sudoku_validCheck.validSetter(Sudoku_board.board.tileList())==True: count-=1 for item in Sudoku_board.board.tileList(): if Sudoku_eliminationTest.elimination(item) !=-1: # print Sudoku_eliminationTest.elimination(item) # count-=1 BUG? item.setValue(Sudoku_eliminationTest.elimination(item)) # Sudoku_validCheck.validCheck(Sudoku_eliminationTest.getAllNeighbourTiles(item)) #To update the valid and invalid tiles after a change has been made. Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) #If things are happening, continue this thread. # Sudoku_view.view() # print if isComplete()==True: Sudoku_view.view() complete=True return True # if continues()==False: # return count+=1 itercount+=1 # Sudoku_view.view() # print return "Couldn't find a solution in "+str(itercount)+" iterations."
def attempt3(): Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[0]) for item in Sudoku_board.board.tileList(): col=Sudoku_board.board.columnList()[item.col()-1] row=Sudoku_board.board.rowList()[item.row()-1] square=Sudoku_board.board.squareList()[item.square()-1] for num in item.validValues(): if not (col.valueExists(num) or row.valueExists(num) or square.valueExists(num)): item.setValue(num) Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[item])
def attempt(): validNums=[1,2,3,4,5,6,7,8,9] Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[0]) for item in Sudoku_board.board.tileList(): if item.value()==-1: print item.name() col=Sudoku_board.board.columnList()[item.col()-1] row=Sudoku_board.board.rowList()[item.row()-1] square=Sudoku_board.board.squareList()[item.square()-1] for num in validNums: if not (col.valueExists(num) or row.valueExists(num) or square.valueExists(num)): #But how to backtrack here...? item.setValue(num) Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(item) else: continue return "Done"
def attempt2(iteration, validNumbers=[1,2,3,4,5,6,7,8,9], keyMax=9): Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[0]) keyMax key=0 iteration=0 while iteration<len(Sudoku_board.board.tileList()): col=Sudoku_board.board.columnList()[Sudoku_board.board.tileList()[iteration].col()-1] row=Sudoku_board.board.rowList()[Sudoku_board.board.tileList()[iteration].row()-1] square=Sudoku_board.board.squareList()[Sudoku_board.board.tileList()[iteration].square()-1] while key<keyMax: if key==keyMax: if not (col.valueExists(validNumbers[key-1]) or row.valueExists(validNumbers[key-1]) or square.valueExists(validNumbers[key-1])): Sudoku_board.board.tileList()[iteration].setValue(validNumbers[key]) Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[iteration]) return attempt2(iteration+1) else: return attempt2(iteration-1,validNumbers[1:0],keyMax=keyMax-1) else: if not (col.valueExists(validNumbers[key-1]) or row.valueExists(validNumbers[key-1]) or square.valueExists(validNumbers[key-1])): Sudoku_board.board.tileList()[iteration].setValue(validNumbers[key]) Sudoku_validCheck.validCheck(Sudoku_board.board.tileList()) Sudoku_eliminationTest.elimination(Sudoku_board.board.tileList()[iteration]) return attempt2(iteration+1) key+=1 iteration+=1