Показать сообщение отдельно
  #1 (permalink)  
Старый 20.12.2017, 07:09
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Судоку проверка
Здравствуйте, есть задача про судоку, поле 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!";
Ответить с цитированием