Example #1
0
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
Example #2
0
 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
Example #3
0
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
Example #4
0
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
Example #5
0
 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