Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сделать все элементы массива уникальными (https://javascript.ru/forum/misc/9636-sdelat-vse-ehlementy-massiva-unikalnymi.html)

Deff 20.12.2015 16:34

рони,
Ну по идее - 90% судоку мон получить по первому столбцу, сдвигая элементы первого столбца для генерации следующего на один элемент по кругу
Т.е. первый - генерим рандомно с наличием всех цифр по высоте, второй получаем сдвигая элементы первого столбца по кругу)мон не на один элемент, а на два(произвольное число), но идентично на такое же число для всех последующих столбцов
1 4 3 2
2 1 4 3
3 2 1 4
4 3 2 1
===========
И да, проще наверно сдвигать по строкам(метода идентична)
Т.е рандом первой строки и рандом цифры циклического сдвига для всех строк

рони 20.12.2015 17:11

Deff,
не уверен что твой алгоритм правильный, где гарантия что квадрат три на три будет заполнен уникально...

Deff 20.12.2015 18:20

рони,
Я уже делал так, сам подумай по логике! (Там еще потом мон еще строки, или столбцы свапировать (обменивать с друг с другом) случайным образом, после заполнения таблички такой методой(типо раширения вариаций)
Свиг соседних не может быть кратен числу элементов в строке или столбце( а так произвольный, наверно меньше строка(или столбец).length, не помню уже, и постоянен для всех строк.

рони 20.12.2015 18:25

Deff,
нет кода, нет результата, нет дум :)

Deff 20.12.2015 18:33

Цитата:

Сообщение от рони
где гарантия что квадрат три на три будет заполнен уникально...

Гарантия уже в том, что ты генеришь случайно первую строки из неповторяющихся цифр

Deff 20.12.2015 18:34

рони,
Я сбацаю, делал на фортране ёщё(Просто табличку доделываю для рулетки)

рони 20.12.2015 18:52

Deff,
подожду код.
Цитата:

Сообщение от Deff
Гарантия уже в том, что ты генеришь случайно первую строки из неповторяющихся цифр

не могу осилить логику этого аргумента

Deff 21.12.2015 05:09

Cм. Спойлер:
<!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 {
 table-layout:fixed;
}
#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,.1) solid 1px;
}
</style>
</head>
<body>
<div id=wrap><table id=out><tbody></tbody></table></div>
<p></p>
<p></p>
<input type="number" min="2" max="20"  value="4" id="in00"><input type="button" value="go" onclick="randomSudoku(+(in00.value))">

<script>
  function indexRandom(lng){
     var a = {},i,out=[],n=0;
     for(i=0;i<lng;i++)a[i]=i;
     while (n!=lng){
       i = Math.floor(lng*Math.random());
       if(typeof(a[i])!='undefined'){
         out.push(a[i]);
         delete a[i];
         n++;
       }
     }
    return out;
  } 
 
randomSudoku = function (lng) {
    var ind = indexRandom(lng); //рандом первой строки;
    var ranTR = indexRandom(lng); //рандом перекида порядка строк в таблице;
    var ranCols = indexRandom(lng); //рандом перекида порядка стобцов в таблице;
    var ar0 = [],arr = [],i,j;
    ar0[0]=ind;             //Рандом для первой строки

    for(i=1;i<lng;i++){    //Формируем табличку
      ar0[i]=ar0[i-1].slice(0);
      ar0[i].unshift(ar0[i].pop());
    }
    for(i=0;i<lng;i++){    //рандом стобцов;
      arr[i]=[];
      for(j=0;j<lng;j++)arr[i][j]=ar0[i][ranCols[j]];
    }

    var out=[];$('#out tr').remove();
    for(i=0;i<lng;i++){
      out[i]=arr[ranTR[i]];//рандом строк;
      var str ='<tr>';
      for(j=0;j<lng;j++)str+='<td>'+out[i][j]+'</td>';
      str+='</tr>';$('#out tbody').append(str)
    }

  }


</script>

</body>
</html>

==========================
Гы, хотя это может еще не судоку - посмотрел Вики(я то неповторяемость по строкам и столбцам смотрел, а там ток с 9Х9 и чоб в 3Х3 не повторялось); Можа завтра докую...
А может и Судоку... (Засыпаю ... нужон критик...)

рони 21.12.2015 11:06

Deff,
судоку варианты заполнения по строкам - критично 6 строка - если нет вариантов - 5 строка неправильный вариант
по квадратам - не пробовал пока
по цифрам- сначала 9 единичек и т.д. - неправильные варианты могут возникать уже на третей цифре ...
самый пробивной вариант строить дерево :write:

Deff 21.12.2015 12:02

рони,
Да, я изучил Википедь, вроде есть одна идейка... Но чот я седни недоспал... мож к вечеру...
Ксать иногда выходят если десятка два перебрать ... но пока не интересно перебором... нун алгоритм попробовать...


Часовой пояс GMT +3, время: 09:17.