Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/05/2010, 15:32
Avatar de Nahuel2k10
Nahuel2k10
 
Fecha de Ingreso: abril-2010
Mensajes: 37
Antigüedad: 14 años
Puntos: 3
Respuesta: generador de sudokus en javascript

Prueba con este script ;) a lo mejor te sirve de base ;).

Código HTML:
Ver original
  1. <script language="javascript">
  2. var sud=new Array(9);
  3. for(var i = 0; i < 9; i++){
  4.     sud[i] = new Array(9)
  5. }
  6. var aux=new Array(9);
  7. for(var i = 0; i < 9; i++){
  8.     aux[i] = new Array(9)
  9. }
  10. function generarSudoku(){
  11.     for(var i = 0; i < 9; i++){
  12.         for(var j = 0; j < 9; j++){
  13.             if(Math.random()*10 > 5){ // Si cambias el 5 es decir lo incrementas es mas dificil y si lo disminuyes mas complicado
  14.                 rellenarCelda(i , j);
  15.             }else{
  16.                 sud[i][j] = "0";
  17.             }
  18.         }
  19.     }
  20.     for(var i = 0; i < 9; i++){
  21.         switch(i){
  22.             case 0: case 3: case 6:
  23.                 var cas = 0;
  24.                 var k = 0;
  25.                 var i2 = i;
  26.                 while(cas < 3){
  27.                     for(var j = 0; j < 3; j++){
  28.                         aux[i2][j] = sud[i][k];
  29.                         k++;
  30.                     }
  31.                     cas++;
  32.                     i2++;
  33.                 }
  34.             break;
  35.             case 1: case 4: case 7:
  36.                 var cas = 0;
  37.                 var k = 0;
  38.                 var i2 = i-1;
  39.                 while(cas < 3){
  40.                     for(var j = 3; j < 6; j++){
  41.                         aux[i2][j] = sud[i][k];
  42.                         k++;
  43.                     }
  44.                     cas++;
  45.                     i2++;
  46.                 }
  47.             break;
  48.             case 2: case 5: case 8:
  49.                 var cas = 0;
  50.                 var k = 0;
  51.                 var i2 = i-2;
  52.                 while(cas < 3){
  53.                     for(var j = 6; j < 9; j++){
  54.                         aux[i2][j] = sud[i][k];
  55.                         k++;
  56.                     }
  57.                     cas++;
  58.                     i2++;
  59.                 }
  60.             break;
  61.             default:
  62.                 alert('Error');
  63.             break;
  64.         }
  65.     }
  66.     for(var i = 0; i < 9; i++){
  67.         for(var j = 0; j < 9; j++){
  68.             if(aux[i][j] != 0){
  69.                 limpiarSudoku(i,j);
  70.             }else{
  71.                 aux[i][j] = '-';
  72.             }
  73.         }
  74.     }
  75. }
  76. function rellenarCelda(i , j){
  77.     var num = parseInt((Math.random()*9)+1);
  78.     if(comprobarCasilla(num,i,j) == false){
  79.         sud[i][j] = "0";
  80.     }else{
  81.         sud[i][j] = num;
  82.     }
  83. }
  84. function limpiarSudoku(i , j){
  85.     for(var k = 0; k < 9; k++){
  86.         if(aux[i][k] == aux[i][j] && k != j){
  87.             aux[i][k]="-";
  88.         }
  89.     }
  90.     for(var k = 0; k < 9; k++){
  91.         if(aux[k][j] == aux[i][j] && k != i){
  92.             aux[k][j]="-";
  93.         }
  94.     }
  95. }
  96. function comprobarCasilla(num,i,j){
  97.     for(var k = 0; k < 9; k++){
  98.         if(sud[i][k] == num){
  99.             return false;
  100.         }
  101.     }
  102.     return true;
  103. }
  104. function imprimirSudoku(){
  105.     document.write("<br>");
  106.     for(var i = 0; i < 9; i++){
  107.         for(var j = 0; j < 9; j++){
  108.             document.write(aux[i][j]+" ");
  109.         }
  110.         document.write("<br>");
  111.     }
  112. }
  113. generarSudoku();
  114. imprimirSudoku();

En mi blog lo puedes ver funcionando. www.nahuel2k10.com