Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Sudoku Solver Using Backtracking in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Sudoku Solver Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Partial Sudoku Board After One Backtracking Step
Given the initial Sudoku board and one step of backtracking filling the first empty cell, what is the state of the board?
DSA Javascript
const 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']
];

function isValid(board, row, col, c) {
  for (let i = 0; i < 9; i++) {
    if (board[row][i] === c) return false;
    if (board[i][col] === c) return false;
    if (board[3 * Math.floor(row / 3) + Math.floor(i / 3)][3 * Math.floor(col / 3) + i % 3] === c) return false;
  }
  return true;
}

// Fill first empty cell with first valid number
for (let r = 0; r < 9; r++) {
  for (let c = 0; c < 9; c++) {
    if (board[r][c] === '.') {
      for (let num = 1; num <= 9; num++) {
        const ch = num.toString();
        if (isValid(board, r, c, ch)) {
          board[r][c] = ch;
          break;
        }
      }
      r = 9; // break outer loop
      break;
    }
  }
}

console.log(board);
A[["5","3","1",".","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"]]
B[["5","3","4",".","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"]]
C[["5","3","2",".","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"]]
D[["5","3","5",".","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"]]
Attempts:
2 left
💡 Hint
Check the first empty cell and try numbers 1 to 9 to find the first valid placement.
🧠 Conceptual
intermediate
1:30remaining
Understanding Backtracking in Sudoku Solver
What is the main reason backtracking is used in solving Sudoku puzzles?
ATo try all possible numbers in empty cells and revert if a conflict arises
BTo sort the numbers in each row before placing them
CTo randomly fill the board and check if it is solved
DTo count the number of empty cells before starting
Attempts:
2 left
💡 Hint
Think about how the solver handles wrong guesses.
🔧 Debug
advanced
1:30remaining
Identify the Bug in Sudoku Validity Check
What error will this code cause when checking validity in Sudoku solver?
DSA Javascript
function isValid(board, row, col, c) {
  for (let i = 0; i < 9; i++) {
    if (board[row][i] === c) return false;
    if (board[i][col] === c) return false;
    if (board[3 * Math.floor(row / 3) + Math.floor(i / 3)][3 * Math.floor(col / 3) + i % 3] === c) return false;
  }
  return true;
}

// Call with row=0, col=0, c='5' on a board where board[0][0] === '5'
AAlways returns true ignoring conflicts
BTypeError due to invalid index calculation in subgrid check
CNo error, returns false because '5' is already at (0,0)
DInfinite loop because i is not incremented
Attempts:
2 left
💡 Hint
Check the loop and index calculations carefully.
🚀 Application
advanced
1:30remaining
Number of Recursive Calls in Sudoku Backtracking
If a Sudoku board has 3 empty cells and each empty cell can be filled with 2 possible numbers, what is the maximum number of recursive calls the backtracking solver might make?
A12
B8
C6
D16
Attempts:
2 left
💡 Hint
Think about the tree of choices for each empty cell.
❓ Predict Output
expert
3:00remaining
Final Solved Sudoku Board Output
What is the final solved Sudoku board after running the complete backtracking solver on this board?
DSA Javascript
const 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']
];

function isValid(board, row, col, c) {
  for (let i = 0; i < 9; i++) {
    if (board[row][i] === c) return false;
    if (board[i][col] === c) return false;
    if (board[3 * Math.floor(row / 3) + Math.floor(i / 3)][3 * Math.floor(col / 3) + i % 3] === c) return false;
  }
  return true;
}

function solve(board) {
  for (let r = 0; r < 9; r++) {
    for (let c = 0; c < 9; c++) {
      if (board[r][c] === '.') {
        for (let num = 1; num <= 9; num++) {
          const ch = num.toString();
          if (isValid(board, r, c, ch)) {
            board[r][c] = ch;
            if (solve(board)) return true;
            board[r][c] = '.';
          }
        }
        return false;
      }
    }
  }
  return true;
}

solve(board);
console.log(board);
A]]"9","7","1","6","8","2","5","4","3"[,]"5","3","6","9","1","4","7","8","2"[,]"4","8","2","7","3","5","1","6","9"[,]"6","5","8","4","2","9","3","1","7"[,]"1","9","7","3","5","8","6","2","4"[,]"3","2","4","1","6","7","9","5","8"[,]"7","6","5","2","4","3","8","9","1"[,]"8","4","3","5","9","1","2","7","6"[,]"2","1","9","8","7","6","4","3","5"[[
B[["5","3","4","6","7","8","9","1","3"],["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"]]
C[["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","8"]]
D[["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"]]
Attempts:
2 left
💡 Hint
Check carefully the last row and column for duplicates.

Practice

(1/5)
1. What is the main idea behind using backtracking to solve a Sudoku puzzle?
easy
A. Try placing numbers one by one and backtrack if a conflict occurs
B. Fill all empty cells randomly and check if the puzzle is solved
C. Use a sorting algorithm to arrange numbers in order
D. Replace all zeros with the number 9 directly

Solution

  1. Step 1: Understand backtracking approach

    Backtracking tries numbers in empty cells one by one and checks if they fit the Sudoku rules.
  2. Step 2: Handle conflicts by backtracking

    If a number causes a conflict, the algorithm removes it and tries the next number, going back if needed.
  3. Final Answer:

    Try placing numbers one by one and backtrack if a conflict occurs -> Option A
  4. Quick Check:

    Backtracking = Try and undo [OK]
Hint: Backtracking means try, check, undo if wrong [OK]
Common Mistakes:
  • Thinking backtracking fills cells randomly
  • Assuming sorting solves Sudoku
  • Replacing zeros without checks
2. Which of the following is the correct way to check if a number can be placed in a Sudoku cell in JavaScript?
easy
A. if isSafe(board, row, col, num) { placeNumber(); }
B. if isSafe(board, row, col, num) then placeNumber();
C. if (isSafe board, row, col, num) { placeNumber(); }
D. if (isSafe(board, row, col, num)) { placeNumber(); }

Solution

  1. Step 1: Understand JavaScript if syntax

    JavaScript requires parentheses around the condition in an if statement.
  2. Step 2: Check function call syntax

    Function calls need parentheses with arguments inside, like isSafe(board, row, col, num).
  3. Final Answer:

    if (isSafe(board, row, col, num)) { placeNumber(); } -> Option D
  4. Quick Check:

    if(condition) with parentheses [OK]
Hint: Use parentheses around conditions in if statements [OK]
Common Mistakes:
  • Missing parentheses in if condition
  • Using 'then' keyword in JavaScript
  • Incorrect function call syntax
3. What will be the output of the following code snippet when solving a Sudoku board?
const board = [
  [5,3,0,0,7,0,0,0,0],
  [6,0,0,1,9,5,0,0,0],
  [0,9,8,0,0,0,0,6,0],
  [8,0,0,0,6,0,0,0,3],
  [4,0,0,8,0,3,0,0,1],
  [7,0,0,0,2,0,0,0,6],
  [0,6,0,0,0,0,2,8,0],
  [0,0,0,4,1,9,0,0,5],
  [0,0,0,0,8,0,0,7,9]
];
solveSudoku(board);
console.log(board);
medium
A. An error because solveSudoku is not defined
B. The original board unchanged with zeros intact
C. A fully solved Sudoku board with no zeros
D. A partially solved board with some zeros replaced

Solution

  1. Step 1: Understand solveSudoku function purpose

    solveSudoku uses backtracking to fill all empty cells correctly, solving the puzzle.
  2. Step 2: Check console.log output after solving

    After solveSudoku runs, the board is fully solved with no zeros remaining.
  3. Final Answer:

    A fully solved Sudoku board with no zeros -> Option C
  4. Quick Check:

    Backtracking solves all cells [OK]
Hint: Backtracking fills all empty cells correctly [OK]
Common Mistakes:
  • Expecting original board unchanged
  • Thinking partial fill is final
  • Assuming function is undefined
4. Consider this buggy code snippet for checking if a number can be placed in a Sudoku cell:
function isSafe(board, row, col, num) {
  for (let x = 0; x < 9; x++) {
    if (board[row][x] === num || board[x][col] === num) {
      return false;
    }
  }
  // Missing 3x3 box check
  return true;
}
What is the main problem here?
medium
A. It returns false too early
B. It does not check the 3x3 subgrid for duplicates
C. It uses wrong loop variable x
D. It modifies the board inside the function

Solution

  1. Step 1: Analyze row and column checks

    The code correctly checks if num exists in the same row or column.
  2. Step 2: Identify missing 3x3 subgrid check

    Sudoku rules require checking the 3x3 box; this code does not do that, causing errors.
  3. Final Answer:

    It does not check the 3x3 subgrid for duplicates -> Option B
  4. Quick Check:

    3x3 box check missing = bug [OK]
Hint: Always check row, column, and 3x3 box [OK]
Common Mistakes:
  • Ignoring 3x3 box validation
  • Thinking loop variable causes error
  • Assuming early return is wrong
5. You want to optimize the Sudoku solver by choosing the next empty cell with the fewest possible valid numbers to try. Which technique does this describe?
hard
A. Heuristic with Minimum Remaining Value (MRV) strategy
B. Random guessing of empty cells
C. Depth-first search without pruning
D. Sorting the board rows before solving

Solution

  1. Step 1: Understand MRV heuristic

    MRV chooses the empty cell with the fewest valid options to reduce branching and speed up solving.
  2. Step 2: Compare with other options

    Random guessing and depth-first search without pruning are less efficient; sorting rows does not help solving.
  3. Final Answer:

    Heuristic with Minimum Remaining Value (MRV) strategy -> Option A
  4. Quick Check:

    MRV = choose cell with fewest options [OK]
Hint: Pick cell with fewest choices first [OK]
Common Mistakes:
  • Confusing random guessing with heuristics
  • Ignoring pruning benefits
  • Thinking sorting helps solving
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard