def run(sudoku, verbose=0): """ :type sudoku: Sudoku :type verbose: int """ changes = 0 if verbose: Colors.blue("[*] Technique: PointingPairs".format(changes)) sudoku.print() for _, row in sudoku.rows.items(): changes += _pointing_pairs_test(sudoku, row, verbose) if changes: if verbose: Colors.green("[+] PointingPairs (Row) > Changes: {}".format(changes)) # sudoku.print() return changes for _, col in sudoku.cols.items(): changes += _pointing_pairs_test(sudoku, col, verbose) if changes: if verbose: Colors.green("[+] PointingPairs (Col) > Changes: {}".format(changes)) # sudoku.print() return changes if verbose: Colors.red("[+] PointingPairs > No changes".format(changes)) # sudoku.print() return changes
def check_sudoku(sudoku, verbose=0): """ :type sudoku: Sudoku """ # verbose = True solved_fields = len([None for _, poss in sudoku.fields.items() if len(poss) == 1]) if solved_fields == 81: if verbose >= 2: Colors.green("[+] Sudoku solved!".format()) return True if verbose >= 2: Colors.red("[-] Solved fields: {}".format(solved_fields)) return False
def run(sudoku, verbose=0): changes = 0 if verbose >= 2: Colors.blue("[*] Technique: Hidden Singles".format(changes)) # sudoku.print() for _, region in sudoku.regions.items(): changes += _hidden_singles_test(sudoku, region, verbose) if changes: if verbose >= 2: Colors.green("[+] Hidden Singles > Changes: {}".format(changes)) # sudoku.print() return changes if verbose >= 2: Colors.red("[-] Hidden Singles > No change".format(changes)) # sudoku.print() return changes
def run(s, verbose=0): changes = 0 if verbose >= 2: Colors.blue("[*] Technique: NakedSingles".format(changes)) if verbose >= 4: s.print() for loc, poss in s.fields.items(): if len(poss) == 1: changes += _eliminate_from_regions(s, loc, poss, verbose) if changes: if verbose >= 2: Colors.green("[+] NakedSingles > Changes: {}".format(changes)) if verbose >= 4: s.print() return changes if verbose >= 2: Colors.red("[-] NakedSingles > No change".format(changes)) if verbose >= 4: s.print() return changes
def solve_sudoku(self, sudoku, verbose=0): """ :type sudoku: Sudoku """ total_changes = 0 changes = 0 while True: total_changes += changes changes = 0 if self.check_sudoku(sudoku): if verbose >= 2: Colors.green("[+] Solved: {}".format(sudoku.line)) break sudoku.print() changes += technique.naked_singles(sudoku, verbose) if changes: continue sudoku.print() changes += technique.hidden_singles(sudoku, verbose) if changes: continue sudoku.print() changes += technique.hidden_pairs(sudoku, verbose) if changes: continue sudoku.print() changes += technique.pointing_pairs(sudoku, verbose) if changes: continue # changes += technique.fish(sudoku, verbose) # if changes: # continue # changes += technique.simple_colouring(sudoku, verbose) if verbose >= 2: Colors.red("[-] Not solved: {}".format(sudoku.line)) if verbose >= 4: sudoku.print() break # if total_changes: # print("Aaahh!") return total_changes