R
E
A
C
T
O
xamples
epeat
ode
pproach
ptimize
est
{ Sudoku Validator }
The Question
Write a function that determines if a Sudoku solution is valid. Your input will be a 2-D array that represents a 9x9 matrix. Sudoku has three rules:
- Every row must contain the numbers from 1-9 (no repeats)
- Every column must also contain every number from 1-9
- Every 3x3 subgroup/square must contain each number from 1-9
Representing the data
Your input is a 2-D array that represents a 9x9 matrix. For example:
[ [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] ]
One Possible Solution
function sudokuValidator(solution) {
for (var i=0; i < 9; i++) { //check the rows
var curRow = [ ];
for (var j =0; j < 9; j++) {
if (curRow.indexOf(solution[i][j]) > -1)
return false;
curRow.push(solution[i][j])
}
}
for (var k=0; k < 9; k++) { //check the columns
var curCol = [ ];
for (var m =0; m < 9; m++) {
if (curCol.indexOf(solution[m][k]) > -1)
return false;
curCol.push(solution[m][k])
}
}
for(var p=0; p<9; p+=3){ //check the squares
for(var q=0; q<9; q+=3){
var curSquare = [ ];
for(var l=p; l<p+3; l++){
for(var n=q; n<q+3; n++){
if (curSquare.indexOf(solution[l][n]) > -1)
return false;
curSquare.push(solution[l][n]);
}
}
}
}
return true;
}
Another Solution
'use strict'
function validSolution(solution){
function check(arr){
return arr.sort()
.filter(function(val, index){
return val===index+1;
})
.length===9;
}
for(let i=0;i<9;i++){
var col=[ ];
var row=[ ];
var square=[ ];
for(let j=0;j<9;j++){
col.push(solution[j][i]);
row.push(solution[i][j]);
square.push(solution[Math.floor(j/3)+(i%3)*3][j%3+Math.floor(i/3)*3]);
}
if(!check(col) || !check(row) || !check(square)) return false;
}
return true;
}
Efficiency
- O(n2) at best since you need to check every space of the board in the worst case
- Even with multiple for loops (the first solution), you check the board 3 times which is O(3n2) which is still O(n2)
Conclusion
- Be creative and show you can think of a problem in different ways
-Be able to discuss efficiency in terms of Big-O notation
- Know how to represent matrices in 2D arrays
Sudoku Validator
By pat310
Sudoku Validator
Technical interview problem for verifying if a sudoku solution is valid
- 2,677