Показать сообщение отдельно
  #41 (permalink)  
Старый 25.12.2015, 00:02
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Вот моя тестилка: (Я еще там тестировал неповторяемость
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="robots" content="noindex">
  <title> Sudoku </title>
<script src='http://code.jquery.com/jquery-1.11.0.js'></script>
<style>

#out td{
 width:34px;
 height:34px;
 text-align:center;
 vaertical-align: middle;
}
#out,
#out tr,
#out td{
 padding: 0px;
 margin: 0px;
 border:none 0;
 border-collapse:collapse;
}
#out td{
 border: rgba(0,0,0,.2) solid 1px;
 color: rgba(0,0,204,.611)
}
#out td:nth-child(3n+1) {
 border-left: rgba(0,0,0,.2) solid 3px;
}
#out tr:nth-child(3n) {
 border-bottom: rgba(0,0,0,.2) solid 3px;
}
#out{
 table-layout:fixed;
 border-top: rgba(0,0,0,.2) solid 3px;
 border-right: rgba(0,0,0,.2) solid 3px;
}
</style>
</head>
<body>
<div id=wrap><table id=out><tbody>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
  <tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
</tbody></table></div>
<p></p>
<p></p>
  <input type="button" value="Запустить!" onclick="getSudoku ()">
<p id=ut></p>

<script>

  function indexRandom(lng){
     var a = {},i,out=[],n=0; 
     while (n!=lng){
       i = Math.floor(lng*Math.random());
       if(typeof(a[i])=='undefined'){
         a[i]=i; out.push(i);
         n++;
       }
     }
    return out;
  }
  //Cдвиг группы из N строк на n-ячеек влево;
  function shiftLinetoN(Nstart,N,n,arr){
     var j,x;
     for(j=Nstart;j<Nstart+N;j++){
        for(x=0;x<n;x++)arr[j].unshift(arr[j].pop());
     }
  }
  //Поворот матрицы на 90°;
  function rotateMatrix90 (arr){
     var RotArr = [],j,i;
     for(j=0;j<9;j++){
        for(i=0;i<9;i++){
           if(j==0) RotArr[i]=[];
           RotArr[i][8-j]=arr[j][i];
        };
     }; return RotArr;
  } 
  //Рандомная перестановка в группе(триаде) из трёх строк;
  function swap3nLines (Nstart,arr){
     var i,del,index = indexRandom(3);
     del = arr.slice(Nstart,Nstart+3);
     for(i=0;i<3;i++)  arr[Nstart+index[i]]=del[i];
  }
  //Рандомная перестановка триад меж собой
  function triadsSwap  (arr){
     var i,out=[],ind = indexRandom(3);
     for(i=0;i<9;i++) out[ind[parseInt(i/3)]*3 + i%3] = arr[i];
     return out;
  } 

 var obj={};
 obj.a = 0;
 obj.b = +new Date();

var busy = false;
 getSudoku = function () {++obj.a; $('#ut').html(obj.a); //if(busy) return;
    busy = true;
   
    var i,j,ind, arr = []; //Таблица;

      //Рандом-Перестановка элементов первой строки;
    var ind = indexRandom(9);for(i=0;i<9;i++){
       if(!i){arr[0]=[];}   arr[0][i]=ind[i]+1;
    };

    arr[1] = arr[0].slice(0); shiftLinetoN(1,1,3,arr);
    arr[2] = arr[1].slice(0); shiftLinetoN(2,1,3,arr);

    //Cоздаём остальные cтроки таблицы;
    for(j=3;j<9;j++){
      arr[j]=arr[j%3].slice(0);
      if(j%3==2) shiftLinetoN(j-2,3,parseInt(j/3),arr);
    }

    //Рандом-Перестановка строк в триадах строк;
    //arr = swap3nLines(arr);
    for(j=3;j<9;j++){
      arr[j]=arr[j%3].slice(0);
      if(j%3==2) shiftLinetoN(j-2,3,parseInt(j/3),arr);
    }

    //Рандомная перестановка триад меж собой
    arr = triadsSwap  (arr)

    //Поворот матрицы на 90°
    arr = rotateMatrix90 (arr);

    //Рандомная перестановка триад меж собой(бывшие тройки столбцов)
    arr = triadsSwap  (arr)

    //Рандомный поворот матрицы: 0/90°
    if(indexRandom(2)[1])arr = rotateMatrix90 (arr);


var b=JSON.stringify(arr);
if(typeof obj[b]=='undefined')obj[b]=1;
else obj[b]++

/*
    //Записываем в таблу
    $('#out td').each(function (j){
       $(this).html(arr[parseInt(j/9)][j%9]);
    });
    busy = false;
*/
if(obj.a==10000){clearTimeout(TimId);alert((+new Date-obj.b)/1000); alert(JSON.stringify(obj).replace(/"\[\[.*?\]\]":/gim,'a:'));}
else {TimId = setTimeout(getSudoku,0);}
 }

</script>

</body>
</html>

Последний раз редактировалось Deff, 25.12.2015 в 17:03.
Ответить с цитированием