рони,
Ну по идее - 90% судоку мон получить по первому столбцу, сдвигая элементы первого столбца для генерации следующего на один элемент по кругу Т.е. первый - генерим рандомно с наличием всех цифр по высоте, второй получаем сдвигая элементы первого столбца по кругу)мон не на один элемент, а на два(произвольное число), но идентично на такое же число для всех последующих столбцов 1 4 3 2 2 1 4 3 3 2 1 4 4 3 2 1 =========== И да, проще наверно сдвигать по строкам(метода идентична) Т.е рандом первой строки и рандом цифры циклического сдвига для всех строк |
Deff,
не уверен что твой алгоритм правильный, где гарантия что квадрат три на три будет заполнен уникально... |
рони,
Я уже делал так, сам подумай по логике! (Там еще потом мон еще строки, или столбцы свапировать (обменивать с друг с другом) случайным образом, после заполнения таблички такой методой(типо раширения вариаций) Свиг соседних не может быть кратен числу элементов в строке или столбце( а так произвольный, наверно меньше строка(или столбец).length, не помню уже, и постоянен для всех строк. |
Deff,
нет кода, нет результата, нет дум :) |
Цитата:
|
рони,
Я сбацаю, делал на фортране ёщё(Просто табличку доделываю для рулетки) |
Deff,
подожду код. Цитата:
|
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,
судоку варианты заполнения по строкам - критично 6 строка - если нет вариантов - 5 строка неправильный вариант по квадратам - не пробовал пока по цифрам- сначала 9 единичек и т.д. - неправильные варианты могут возникать уже на третей цифре ... самый пробивной вариант строить дерево :write: |
рони,
Да, я изучил Википедь, вроде есть одна идейка... Но чот я седни недоспал... мож к вечеру... Ксать иногда выходят если десятка два перебрать ... но пока не интересно перебором... нун алгоритм попробовать... |
Часовой пояс GMT +3, время: 07:15. |