Foros del Web » Programando para Internet » Javascript »

generador de sudokus en javascript

Estas en el tema de generador de sudokus en javascript en el foro de Javascript en Foros del Web. Hola, como pudiera hacer un generador de sudokus en javascript? llevo varios dias con esto y no encuentro nada. lo más que he logrado hacer ...
  #1 (permalink)  
Antiguo 08/05/2010, 16:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 137
Antigüedad: 15 años, 6 meses
Puntos: 4
generador de sudokus en javascript

Hola, como pudiera hacer un generador de sudokus en javascript? llevo varios dias con esto y no encuentro nada. lo más que he logrado hacer es ésto:

Código Javascript:
Ver original
  1. var row1=[0,0,0,0,0,0,0,0,0];
  2. var row2=[0,0,0,0,0,0,0,0,0];
  3. var row3=[0,0,0,0,0,0,0,0,0];
  4. var row4=[0,0,0,0,0,0,0,0,0];
  5. var row5=[0,0,0,0,0,0,0,0,0];
  6. var row6=[0,0,0,0,0,0,0,0,0];
  7. var row7=[0,0,0,0,0,0,0,0,0];
  8. var row8=[0,0,0,0,0,0,0,0,0];
  9. var row9=[0,0,0,0,0,0,0,0,0];
  10. var cont; var celda=0;
  11.  
  12. var rows=[row1,row1,row2,row3,row4,row5,row6,row7,row8,row9];  
  13.  
  14. for(var a=1;a<=4;a++){
  15. cont=0;
  16.  
  17. do{
  18. i = parseInt(Math.random()*9)+1;
  19.  
  20.  
  21. if(i!=rows[a][0] && i!=rows[a][1] && i!=rows[a][2] && i!=rows[a][3] && i!=rows[a][4] && i!=rows[a][5] && i!=rows[a][6] && i!=rows[a][7] && i!=rows[a][8]){ //misma línea
  22. if(i!=rows[0][cont] && i!=rows[1][cont] && i!=rows[2][cont] && i!=rows[3][cont] && i!=rows[4][cont] && i!=rows[5][cont] && i!=rows[6][cont] && i!=rows[7][cont] && i!=rows[8][cont]){ //misma columna
  23.  
  24. rows[a][cont]=i; cont++;
  25.  
  26. }}
  27. }
  28.  
  29. while(cont<9);
  30. }

nota que en el for le puse sólo 4 en ves de 9 que debería de ser, porque si le pongo más se traba, por favor ayúdenme.
  #2 (permalink)  
Antiguo 11/05/2010, 15:32
Avatar de 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

Etiquetas: generador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:38.