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 не повторялось); Можа завтра докую...
А может и Судоку... (Засыпаю ... нужон критик...)