> Alguien puede ayudarme,
Lo he solucionado con un programa en Qbasic que
adjunto ( pongo el mensaje en HTML, para que no partan las lineas, si alguien
necesita el qbasci esta en mi pagina)
Lo intente hacer por el metodo aleatorio y es
cierto que se tarde mucho tiempo, por que la mayoria de los tableros que hacia
eran incorrectos
Luego haciendo pruebas me di cuenta que solo es
posible que un carton tenga tres colunmas con 2 tapados, en eso se basa mi
programa
La primera linea es sencilla, se eligen los 4
tapados al hacer
La segunda es mas complicada se eligen 4 al azar
pero se comprueba que solo 3 esten en linea, si el cuarto tambien esta el linea
se vuelve a calcular
La tercer linea es mas complicada, se calcula al
azar
si hay ya dos en linea en esa colunma se vuelve a
calcular
si hay uno y ya estan 3 en linea se vuelve a
calcular
Si no se deja
Este es el mas lento pero como solo son 9 numero ,
no tarda mucho.
Al final calcula el carton al
prainstate.
Si alguien tiene dudas sobre el codigo que me
escriba un email. (si quieres que tambien calcule los numeros me lo dices
¿OK?)
CODIGO AL FINAL DEL MENSAJE
SAludos
CODIGO EN QBASIC
DIM CARTON$(3, 9) 'Carton de 3 filas y 9
columnas
RANDOMIZE TIMER
CLS
'Solo puede haber tres colunmas con dos
tapados
COLDIS = 3
FOR Y = 1 TO 3
FOR X = 1 TO 9
CARTON$(Y, X) =
"00"
NEXT X
NEXT Y
'Vamos a colocar los tapados
'Primera
Fila
FOR X = 1 TO 4
1 FICHA = INT(RND * 9) + 1
IF CARTON$(1, FICHA)
<> "XX" THEN CARTON$(1, FICHA) = "XX" ELSE GOTO 1
NEXT X
'Segunda Fila
FOR X = 1 TO 4
2 FICHA =
INT(RND * 9) + 1
IF CARTON$(2, FICHA) = "XX" GOTO 2
IF CARTON$(1, FICHA) =
"XX" THEN
IF COLDIS = 0 GOTO 2
COLDIS = COLDIS - 1
END IF
CARTON$(2,
FICHA) = "XX"
NEXT X
'Tercera Fila
FOR X = 1 TO 4
3 FICHA =
INT(RND * 9) + 1
IF CARTON$(3, FICHA) = "XX" THEN GOTO 3
IF CARTON$(1,
FICHA) = "XX" AND CARTON$(2, FICHA) = "XX" GOTO 3
IF CARTON$(1, FICHA) = "XX"
THEN
IF COLDIS = 0 GOTO 3
COLDIS = COLDIS - 1
END IF
IF CARTON$(2,
FICHA) = "XX" THEN
IF COLDIS = 0 GOTO 3
COLDIS = COLDIS - 1
END
IF
CARTON$(3, FICHA) = "XX"
NEXT X
'Imprime en pantalla
FOR Y = 1 TO 3
FOR X
= 1 TO 9
PRINT CARTON$(Y, X) + " ";
NEXT X
PRINT
NEXT Y