Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/11/2013, 06:15
tanrax
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Reto de programación

Cita:
Iniciado por marlanga Ver Mensaje
Hazlo por fuerza bruta, y cuando consigas que funcione, intenta refinarlo para eliminar comprobaciones absurdas y reducir bucles.

Por fuerza bruta consiste en un bucle anidado (dos FOR) que recorra todas las celdas de tu array bidimensional.

Cuando tengas la celda, ejecutarás un bucle mas, que irá de 0 a 2 (para comprobar si hay 3 en línea). Dicho índice se lo incrementarás a por ejemplo la columna, para comprobar si hay 3 casillas seguidas en la misma fila con el valor 1. Ten cuidado de no sobrepasar el tamaño máximo del array. Si encuentras tres seguidas, vuelve a ejecutar el mismo for pero esta vez poniendo las casillas a cero.

Luego haces lo mismo con las columnas, incrementando esta vez al fila.
Y despues lo mismo para diagonals, incrementando fila y columna. Y por último, para la diagonal inversa, incrementando la columnay restando a la fila.

En pseudo codigo

Código Javascript:
Ver original
  1. for (fila=0;fila<7;fila++)
  2. {
  3.     for(columna=0;columna<7;columna++)
  4.     {
  5.         //Bucle para comprobar filas
  6.         aciertos=0;
  7.         for (casilla=0;casilla<2 || columna+casilla<7;casilla++)
  8.        {
  9.             if tablero[fila,columna+casilla]==1  aciertos++;
  10.        }
  11.        if aciertos==3
  12.       {
  13.             for (casilla=0;casilla<2;casilla++)
  14.             {
  15.                  tablero[fila,columna+casilla]==0;
  16.              }
  17.       }
  18.       aciertos=0;
  19.       //Bucle para columnas, curratelo
  20.       //Bucle para diagonal izquierda-derecha, curratelo
  21.       //Bucle para diagonal derecha-izquierda, curratelo
  22.     }
  23. }
No lo he probado, te lo digo desde la ignorancia de lo testearlo; pero: ¿cuenta o comprueba que estan en línea?

Me refiero:

0001110 -> Una fila
1010101 -> No hay fila.

¿Lo comprueba?

Otra cosa: para diagonales no funcionaría, ¿verdad?

Muchas gracias!!