JSFiddle - React, Tailwind, and code Playground

by Vlad Rasenko

JavaScript

function validSolution (board) {
  const scheme = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  const cells = []
  for (const r of scheme) {
    for (const c of scheme) {
      const cell = []

      for (const i of r) {
        for (const j of c) {
          cell.push(board[i][j])
        }
      }
     
      cells.push(cell)
    }
  }

  return cells.reduce((valid, cell) => {
    const freeDigits = cell.reduce((digits, digit) => {
      const index = digits.indexOf(digit)
      if (index !== -1) digits.splice(index, 1)
      return digits
    }, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    console.log(freeDigits)
    return valid && !freeDigits.length
  }, true)
}

console.log(validSolution([[0, 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]]))