Prueba con este script ;) a lo mejor te sirve de base ;).
Código HTML:
Ver original<script language="javascript"> var sud=new Array(9);
for(var i = 0; i < 9; i++){
sud[i] = new Array(9);
}
var aux=new Array(9);
for(var i = 0; i < 9; i++){
aux[i] = new Array(9);
}
function generarSudoku(){
for(var i = 0; i < 9; i++){
for(var j = 0; j < 9; j++){
if(Math.random()*10 > 5){ // Si cambias el 5 es decir lo incrementas es mas dificil y si lo disminuyes mas complicado
rellenarCelda(i , j);
}else{
sud[i][j] = "0";
}
}
}
for(var i = 0; i < 9; i++){
switch(i){
case 0: case 3: case 6:
var cas = 0;
var k = 0;
var i2 = i;
while(cas < 3){
for(var j = 0; j < 3; j++){
aux[i2][j] = sud[i][k];
k++;
}
cas++;
i2++;
}
break;
case 1: case 4: case 7:
var cas = 0;
var k = 0;
var i2 = i-1;
while(cas < 3){
for(var j = 3; j < 6; j++){
aux[i2][j] = sud[i][k];
k++;
}
cas++;
i2++;
}
break;
case 2: case 5: case 8:
var cas = 0;
var k = 0;
var i2 = i-2;
while(cas < 3){
for(var j = 6; j < 9; j++){
aux[i2][j] = sud[i][k];
k++;
}
cas++;
i2++;
}
break;
default:
alert('Error');
break;
}
}
for(var i = 0; i < 9; i++){
for(var j = 0; j < 9; j++){
if(aux[i][j] != 0){
limpiarSudoku(i,j);
}else{
aux[i][j] = '-';
}
}
}
}
function rellenarCelda(i , j){
var num = parseInt((Math.random()*9)+1);
if(comprobarCasilla(num,i,j) == false){
sud[i][j] = "0";
}else{
sud[i][j] = num;
}
}
function limpiarSudoku(i , j){
for(var k = 0; k < 9; k++){
if(aux[i][k] == aux[i][j] && k != j){
aux[i][k]="-";
}
}
for(var k = 0; k < 9; k++){
if(aux[k][j] == aux[i][j] && k != i){
aux[k][j]="-";
}
}
}
function comprobarCasilla(num,i,j){
for(var k = 0; k < 9; k++){
if(sud[i][k] == num){
return false;
}
}
return true;
}
function imprimirSudoku(){
document.write("<br>");
for(var i = 0; i < 9; i++){
for(var j = 0; j < 9; j++){
document.write(aux[i][j]+" ");
}
document.write("<br>");
}
}
generarSudoku();
imprimirSudoku();
En mi blog lo puedes ver funcionando. www.nahuel2k10.com