DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

1 1

Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells.

A sudoku solution must satisfy all of the following rules:

  1. Each of the digits 1-9 must occur exactly once in each row.
  2. Each of the digits 1-9 must occur exactly once in each column.
  3. Each of the digits 1-9 must occur exactly once in each of the 9 3x3 sub-boxes of the grid.

The '.' character indicates empty cells.

Example 1:

Input: board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]
Output: [["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]
Explanation: The input board is shown above and the only valid solution is shown below:

Constraints:

  • board.length == 9
  • board[i].length == 9
  • board[i][j] is a digit or '.'.
  • It is guaranteed that the input board has only one solution.

SOLUTION:

class Solution:
    def getPos(self, board, i, j):
        pos = set(map(str, range(1, 10)))
        ci, cj = i - i % 3, j - j % 3
        for a in range(3):
            for b in range(3):
                if board[ci + a][cj + b] != "." and board[ci + a][cj + b] in pos:
                    pos.remove(board[ci + a][cj + b])
        for a in range(9):
            if board[i][a] in pos:
                pos.remove(board[i][a])
            if board[a][j] in pos:
                pos.remove(board[a][j])
        return pos

    def solve(self, board, spi):
        if spi >= len(self.spaces):
            return True
        if spi < len(self.spaces):
            i, j = self.spaces[spi]
            pos = self.getPos(board, i, j)
            for p in pos:
                board[i][j] = p
                currsolution = self.solve(board, spi + 1)
                if currsolution:
                    return True
                else:
                    board[i][j] = "."
        return False

    def solveSudoku(self, board: List[List[str]]) -> None:
        self.spaces = []
        for i in range(9):
            for j in range(9):
                if board[i][j] == ".":
                    self.spaces.append((i, j))
        self.solve(board, 0)
Enter fullscreen mode Exit fullscreen mode

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay