examples/sudoku.py
def solve(grid):
    """
    solve a Sudoku grid inplace
    """
    clauses = sudoku_clauses()
    for i in range(1, 10):
        for j in range(1, 10):
            d = grid[i - 1][j - 1]
            # For each digit already known, a clause (with one literal).
            # Note:
            #     We could also remove all variables for the known cells
            #     altogether (which would be more efficient).  However, for
            #     the sake of simplicity, we decided not to do that.
            if d:
                clauses.append([v(i, j, d)])

    # solve the SAT problem
    sol = set(pycosat.solve(clauses))

    def read_cell(i, j):
        # return the digit of cell i, j according to the solution
        for d in range(1, 10):
            if v(i, j, d) in sol:
                return d

    for i in range(1, 10):
        for j in range(1, 10):
            grid[i - 1][j - 1] = read_cell(i, j)
def solve(grid):
    clauses = sudoku_clauses()
    for i in range(1, 10):
        for j in range(1, 10):
            d = grid[i - 1][j - 1]
            # For each digit already known, a clause (with one literal).
            # Note:
            #     We could also remove all variables for the known cells
            #     altogether (which would be more efficient).  However, for
            #     the sake of simplicity, we decided not to do that.
            if d:
                clauses.append([v(i, j, d)])

    # solve the SAT problem
    sol = set(pycosat.solve(clauses))

    def read_cell(i, j):
        # return the digit of cell i, j according to the solution
        for d in range(1, 10):
            if v(i, j, d) in sol:
                return d

    for i in range(1, 10):
        for j in range(1, 10):
            grid[i - 1][j - 1] = read_cell(i, j)
def solve ( grid ) : clauses = sudoku_clauses ( ) for i in range ( 1 , 10 ) : for j in range ( 1 , 10 ) : d = grid [ i - 1 ] [ j - 1 ] # For each digit already known, a clause (with one literal). # Note: #     We could also remove all variables for the known cells #     altogether (which would be more efficient).  However, for #     the sake of simplicity, we decided not to do that. if d : clauses . append ( [ v ( i , j , d ) ] ) # solve the SAT problem sol = set ( pycosat . solve ( clauses ) ) def read_cell ( i , j ) : # return the digit of cell i, j according to the solution for d in range ( 1 , 10 ) : if v ( i , j , d ) in sol : return d for i in range ( 1 , 10 ) : for j in range ( 1 , 10 ) : grid [ i - 1 ] [ j - 1 ] = read_cell ( i , j )
solve a Sudoku grid inplace
solve a Sudoku grid inplace