20.12.2015, 16:34
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
рони,
Ну по идее - 90% судоку мон получить по первому столбцу, сдвигая элементы первого столбца для генерации следующего на один элемент по кругу
Т.е. первый - генерим рандомно с наличием всех цифр по высоте, второй получаем сдвигая элементы первого столбца по кругу)мон не на один элемент, а на два(произвольное число), но идентично на такое же число для всех последующих столбцов
1 4 3 2
2 1 4 3
3 2 1 4
4 3 2 1
===========
И да, проще наверно сдвигать по строкам(метода идентична)
Т.е рандом первой строки и рандом цифры циклического сдвига для всех строк
Последний раз редактировалось Deff, 20.12.2015 в 16:43.
|
|
20.12.2015, 17:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
Deff,
не уверен что твой алгоритм правильный, где гарантия что квадрат три на три будет заполнен уникально...
|
|
20.12.2015, 18:20
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
рони,
Я уже делал так, сам подумай по логике! (Там еще потом мон еще строки, или столбцы свапировать (обменивать с друг с другом) случайным образом, после заполнения таблички такой методой(типо раширения вариаций)
Свиг соседних не может быть кратен числу элементов в строке или столбце( а так произвольный, наверно меньше строка(или столбец).length, не помню уже, и постоянен для всех строк.
Последний раз редактировалось Deff, 20.12.2015 в 18:31.
|
|
20.12.2015, 18:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
Deff,
нет кода, нет результата, нет дум
|
|
20.12.2015, 18:33
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от рони
|
где гарантия что квадрат три на три будет заполнен уникально...
|
Гарантия уже в том, что ты генеришь случайно первую строки из неповторяющихся цифр
|
|
20.12.2015, 18:34
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
рони,
Я сбацаю, делал на фортране ёщё(Просто табличку доделываю для рулетки)
|
|
20.12.2015, 18:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
Deff,
подожду код.
Сообщение от Deff
|
Гарантия уже в том, что ты генеришь случайно первую строки из неповторяющихся цифр
|
не могу осилить логику этого аргумента
|
|
21.12.2015, 05:09
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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 не повторялось); Можа завтра докую...
А может и Судоку... (Засыпаю ... нужон критик...)
Последний раз редактировалось Deff, 22.12.2015 в 17:54.
|
|
21.12.2015, 11:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
Deff,
судоку варианты заполнения по строкам - критично 6 строка - если нет вариантов - 5 строка неправильный вариант
по квадратам - не пробовал пока
по цифрам- сначала 9 единичек и т.д. - неправильные варианты могут возникать уже на третей цифре ...
самый пробивной вариант строить дерево
|
|
21.12.2015, 12:02
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
рони,
Да, я изучил Википедь, вроде есть одна идейка... Но чот я седни недоспал... мож к вечеру...
Ксать иногда выходят если десятка два перебрать ... но пока не интересно перебором... нун алгоритм попробовать...
|
|
|
|