20/11/2013, 06:15
|
| | Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 11 años Puntos: 0 | |
Respuesta: Reto de programación Cita:
Iniciado por marlanga 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 originalfor (fila=0;fila<7;fila++) { for(columna=0;columna<7;columna++) { //Bucle para comprobar filas aciertos=0; for (casilla=0;casilla<2 || columna+casilla<7;casilla++) { if tablero[fila,columna+casilla]==1 aciertos++; } if aciertos==3 { for (casilla=0;casilla<2;casilla++) { tablero[fila,columna+casilla]==0; } } aciertos=0; //Bucle para columnas, curratelo //Bucle para diagonal izquierda-derecha, curratelo //Bucle para diagonal derecha-izquierda, curratelo } }
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!! |