Los límites de tus FOR están mal. Tu sudoku tiene valores repetidos en dos verticales. También faltaría comprobar que los valores están entre 1 y 9, aunque se asume que esa comprobación quizá debería hacerse cuando el usuario intente meter un valor al sudoku.
Código Javascript
:
Ver originalfunction ValidarSudoku(s) {
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
for (var k = j + 1; k < 9; k++) {
if (s[i][j] == s[i][k]) {
console.log('H', s[i][j], i+'-'+j, i+'-'+k)
return false;
}
if (s[j][i] == s[k][i]) {
console.log('V', s[j][i], j+'-'+i, k+'-'+i)
return false;
}
if (s[Math.floor(i/3) * 3 + Math.floor(j/3)][i%3 * 3 + j%3] == s[Math.floor(i/3) * 3 + Math.floor(k/3)][i%3 * 3 + k%3]) {
console.log('C', s[Math.floor(i/3) * 3 + Math.floor(j/3)][i%3 * 3 + j%3], (Math.floor(i/3) * 3 + Math.floor(j/3))+'-'+ (i%3 * 3 + j%3), (Math.floor(i/3) * 3 + Math.floor(k/3))+'-'+(i%3 * 3 + k%3));
return false;
}
}
}
}
return true;
}
El console log dice [H]orizontal, valor repetido, coordenada 1, coordenada 2.
Los otros dos son [V]ertical y [C]asilla (mini cuadros de 3x3) contados de izquierda a derecha y arriba a abajo..