Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Validar juego sudoku

Estas en el tema de Validar juego sudoku en el foro de Javascript en Foros del Web. Tengo un juego sudoku representado por un array, he validado que no exista el número en la misma fila o columna... Como puedo validar que ...
  #1 (permalink)  
Antiguo 24/05/2016, 15:19
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 13 años, 1 mes
Puntos: 15
Validar juego sudoku

Tengo un juego sudoku representado por un array, he validado que no exista el número en la misma fila o columna...

Como puedo validar que no exista dentro del mismo cuadrado (3x3)

Código Javascript:
Ver original
  1. function ValidarSudoku(s) {
  2.   for(k=0;k<8;k++)  
  3.       for(i=0;i<8;i++){
  4.           a=s[k][i]
  5.           for(j=0;j<8;j++)
  6.               if(a==s[k][j] && j!=i) return false
  7.       }
  8.  
  9.    
  10.     for(k=0;k<8;k++)  
  11.       for(i=0;i<8;i++){
  12.           a=s[i][k]
  13.           for(j=0;j<8;j++)
  14.               if(a==s[j][k] && j!=i) return false
  15.       }
  16.  
  17.     return true
  18. }


La entrada es

Código Javascript:
Ver original
  1. [[9,4,8,2,5,3,1,7,6],
  2.  [5,1,7,8,4,6,2,3,9],
  3.  [6,3,2,1,9,7,5,8,4],
  4.  [2,8,5,4,3,1,6,9,7],
  5.  [4,7,3,6,2,9,8,5,1],
  6.  [1,9,6,5,7,8,3,4,2],
  7.  [8,2,4,9,1,5,7,6,3],
  8.  [7,5,1,3,6,4,9,2,8],
  9.  [3,1,9,7,8,2,4,6,5]]


en el cuadro de abajo a la izquierda posee dos '1' dentro del cuadro de 3x3 debiese retornar false
  #2 (permalink)  
Antiguo 25/05/2016, 16:04
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 5 meses
Puntos: 206
Respuesta: Validar juego sudoku

Los límites de tus FOR están mal. Tu sudoku tiene valores repetidos en dos verticales. También faltaría comprobar que los valores están entre 1 y 9, aunque se asume que esa comprobación quizá debería hacerse cuando el usuario intente meter un valor al sudoku.

Código Javascript:
Ver original
  1. function ValidarSudoku(s) {
  2.     for (var i = 0; i < 9; i++) {
  3.     for (var j = 0; j < 9; j++) {
  4.         for (var k = j + 1; k < 9; k++) {
  5.         if (s[i][j] == s[i][k]) {
  6.           console.log('H', s[i][j], i+'-'+j, i+'-'+k)
  7.             return false;
  8.         }
  9.         if (s[j][i] == s[k][i]) {
  10.             console.log('V', s[j][i], j+'-'+i, k+'-'+i)
  11.           return false;
  12.         }
  13.         if (s[Math.floor(i/3) * 3 + Math.floor(j/3)][i%3 * 3 + j%3] == s[Math.floor(i/3) * 3 + Math.floor(k/3)][i%3 * 3 + k%3]) {
  14.           console.log('C', s[Math.floor(i/3) * 3 + Math.floor(j/3)][i%3 * 3 + j%3], (Math.floor(i/3) * 3 + Math.floor(j/3))+'-'+ (i%3 * 3 + j%3), (Math.floor(i/3) * 3 + Math.floor(k/3))+'-'+(i%3 * 3 + k%3));
  15.             return false;
  16.         }
  17.       }
  18.     }
  19.   }
  20.  
  21.   return true;
  22. }

El console log dice [H]orizontal, valor repetido, coordenada 1, coordenada 2.
Los otros dos son [V]ertical y [C]asilla (mini cuadros de 3x3) contados de izquierda a derecha y arriba a abajo..
  #3 (permalink)  
Antiguo 26/05/2016, 07:18
 
Fecha de Ingreso: junio-2011
Mensajes: 289
Antigüedad: 13 años, 1 mes
Puntos: 15
Respuesta: Validar juego sudoku

Anoche me dí cuenta de que tenia mal los límites.

La validación de los números la hago en otro sitio.

Respecto a validar los cuadros 3x3 debo darle una vuelta para lograr entenderlo, muchas gracias.

Etiquetas: juego, sudoku
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




La zona horaria es GMT -6. Ahora son las 10:58.