Tengo que crear una matriz de numeros ( 1 a 6) con un ancho X y un largo Y
en tu ejemplo 6x4, x=6 y=4, ok...
El array Z0 debe tener un 5 y el Z-1 un 6. Entonces quedaría algo asi:
XXX5XX
XXXXXX
XXXXXX
6XXXXX
Elige al azar una columna en sendas filas y la rellenas con el susodcho valor.
n = Random(entre 0 y x-1)
Array(0, n) = 5 // línea 0 posición n, un 5
n = Random(entre 0 y x-1)
Array(y-1, n) = 6 // linea 3, posicion n, un 6.
La siguiente condición es que en Zx debe existir un 2 y en Zx+1 un 3.
X2X5XX
X3XX2X
XXXX32
6XXXX3
Esta parte, no acabo de entenderlo.
No sé a que llamas Zx, mirando el array... ¿una fila, una columna, una columna de una fila, de varias?
Vale, tras mirarlo más veces, creo entender que lo que tratas de hacer es crear un 2 en cada línea excepto la última y asignar un 3 en la misma columna pero en la siguiente fila.
Si es así, este sería el pseudocódigo:
bucle para k desde 0 hasta y-2
hacer
n = random(entre 0 y x-1)
repetir mientras array(k,n) distinto de 0 // no queremos que sobrescriba el 5 ni el 6
Array(k,n)=2
Array(k+1, n)=3
siguiente en bucle
Y la ultima condición es que :
Entre 2/3/6/5 solo puede haber 1.
X215XX
X3112X
XXXX32
611113
Entiendo que entre 2 y 2,3,5,6; entre 3 y 2,3,5,6; entre 5 y 2,3 y entre 6 y 2,3. Pero no entre 5 y 6, porque no están en la misma línea (ni pueden estarlo), Así como tampoco 2 cincos ni 2 seis.
bucle para k desde 0 a y-1 // por cada linea
// buscar punto de comienzo
bucle para j desde 0 a x-2 // por cada columna
Si array(k,j) = 2,3,5 ó 6 luego //buscamos un valor en la fila (2,3,5,6)
ini= j // y lo recordamos.
salir del bucle
fin si
siguiente en bucle
// buscar punto final
bucle para j desde ini+1 a x-1
Si array(k,j) = 2,3 ó 5 luego buscamos un valor en la fila (2,3,5,6)
fin= j
salir del bucle
fin si
siguiente en bucle
// rellenar entre medias (de inicio y final)...
bucle para j desde (ini +1) hasta (fin-1)
array(k, j) = 1
siguiente en bucle
siguiente en bucle
El código en esta sección se puede optimizar (yo lo dejo así por claridad), por ejemplo:
- recorriendo el bucle segundo desde el final hacia atrás...
- mientras no se encuentre el valor final, escribir YA el 1, haciendo innecesario el bucle final.
- en vez de salir de un bucle, anidar dentro de él el siguiente bucle (aunque en líea ganan en claridad).
Todo lo demas que no fue seteado pueden ser 1 ó 4
Se supone que lo que no tiene 'valor' es 0... es decir que inicialmente el contenido del array era todos ceros.
bucle para k desde 0 a y-1 // por cada linea
bucle para j desde 0 a x-1 // por cada columna
Si Array(k,j) = 0
n= random(entre 0 y 1) //elegir 1 de 2 opciones
n = ((n * 3) +1) // Si False = 1, si TRUE=4
Array(k,j) = n
fin si
siguiente en bucle
siguiente en bucle