Здравствуйте, есть задача про судоку, поле 9на9, нужно проверить, чтобы цифры в строках, столбцах и в боксах 3на3 не было повторений цифр.
Нагородил вот тут, сам запутался там:
https://jsfiddle.net/bb3o2ohr/
Нужно в итоге вернуть "try again" или "finished".
Допустим есть поле:
[ [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
[ 2, 3, 4, 5, 6, 7, 8, 9, 1 ],
[ 3, 4, 5, 6, 7, 8, 9, 1, 2 ],
[ 4, 5, 6, 7, 8, 9, 1, 2, 3 ],
[ 5, 6, 7, 8, 9, 1, 2, 3, 4 ],
[ 6, 7, 8, 9, 1, 2, 3, 4, 5 ],
[ 7, 8, 9, 1, 2, 3, 4, 5, 6 ],
[ 8, 9, 1, 2, 3, 4, 5, 6, 7 ],
[ 9, 1, 2, 3, 4, 5, 6, 7, 8 ] ]
//Создаю переменные:
var i; //Для первого цикла
var j; // Для второго
var z; // Для цикла в массиве цифр
var uniq1Arr = []; //Здесь массивы, для строк
var uniq2Arr = []; // Для колонок
var uniq3Arr =[]; // Для полей 3 на 3
//Иду циклами, например:
// Здесь проверяю строчки, и пушу каждую цифру строки в массив, если длина массива больше 9, очищаю его.
for(i=0; i<9; i++) {
for(j=0; j<9; j++) {
for(z=0; z<uniq1Arr.length; z++) {
if(uniq1Arr.length >9) uniq1Arr = [];
if(board[i][j] == uniq1Arr[z]) {
return "Try again!";
}
uniq1Arr.push(board[i][j]);
}
// Здесь проверяю колонки, и пушу каждую цифру колонки в массив, если длина массива больше 9, очищаю его.
for(i=0; i<9; i++) {
for(j=0; j<9; j++) {
for(z=0; z<uniq2Arr.length; z++) {
if(uniq1Arr.length >9) uniq2Arr = [];
if(board[j][i] == uniq2Arr[z]) {
return "Try again!";
}
uniq1Arr.push(board[j][i]);
}
//Поля 3на3 проверяю так...
for(i=0; i<3; i++){
for(j=0; j<3; j++) {
for(z=0; z<uniq3Arr.length; z++) {
if(board[i][j] == uniq1Arr[z]) return "Try again!";
}
if(board[i][j] == uniq3) return "Try again!" ;
uniq3 = board[i][j];
}
}
uniq3 = 0;
uniq3Arr = [];
for(i=3; i<6; i++){
for(j=0; j<3; j++) {
for(z=0; z<uniq3Arr.length; z++) {
if(board[i][j] == uniq3Arr[z]) return "Try again!";
}
if(board[i][j] == uniq3) return "Try again!"
uniq3 = board[i][j]
}
}
uniq3 = 0;
uniq3Arr = [];
for(i=6; i<9; i++){
for(j=0; j<3; j++) {
for(z=0; z<uniq3Arr.length; z++) {
if(board[i][j] == uniq3Arr[z]) return "Try again!";
}
if(board[i][j] == uniq3) return "Try again!"
uniq3 = board[i][j]
}
}
//Если всё прошло, победа
return "Finished!";