Despues de echarle un ratillo al asunto creo que he sacao algo.
Primero he hecho un mapa de 2x2 sin variar ninguna casilla :
NB
BN
y lo he solucionado de esta forma :
01
02
Este mapa devuelve un código formado por tres filas de diez dígitos :
5880477582
5880477582
8568697731
Lo primero que me mosquea es que las dos primeras filas son iguales,y solo varía la tercera.
Así que lo que hago es solucionar el mapa de esta manera :
10
20
que devuelve este codigo :
5880477582
5880477582
9693144431
Como se ve,lo único que cambia es la tercera línea ,así que esa línea debe guardar la solución con la que hemos
validado el mapa.
Las otras dos no cambian así que deben ser el mapa en si mismo.
Centrémonos en las dos primeras líneas ,ahora crearé un mapa de 8x8 sin variar ninguna casilla :
NBNBNBNB
BNBNBNBN
NBNBNBNB
BNBNBNBN
NBNBNBNB
BNBNBNBN
NBNBNBNB
BNBNBNBN
el código resultante sin tener encuenta la última línea es este :
5880477582
5880477582
que como vemos es igual que el código del mapa de 2x2 en el que tampoco se varió ninguna casilla.
Esta claro que aunque para nosotros el mapa sea de 2x2 el juego
está guardando todo el tablero, ya que es el mismo código que el de 8x8.
por lo que el mapa sin variar ninguna casilla y sea del tamaño que sea siempre da este código :
5880477582
5880477582
que llamaré código por defecto xD.
Así que ahora me creo un mapa de 3x3 en el cambio la primera casilla :
BBN
BNB
NBN
y nos da este resultado :
4880477582
5880477582
juass solo ha cambiado el primer dígito de la primera fila a 4 ,cambiemos también la primera casilla de la tercera fila del mapa.
La segunda fila por ahora no cambia.
BBN
BNB
BBN
que nos da este código :
8435767582
5880477582
ahora vemos que han variado algunos dígitos más,pero lo que me mosquea es que
la segunda fila 5880477582 no ha variado en ningún puzle por ahora.
Esta claro que algo no varía y por eso se repite siempre la segunda fila del código.
El mapa con un tamaño máximo puede ser de 8x8, con lo que se podría representar con 64bits,que pasado a un int
nos daría una cifra de 19 dígitos ,vaya, no llega para representar el mapa,y eso me da la pista de porque no varía (por ahora) la segunda fila.
Ahora me creo un mapa de 5,3 en el que sólo cambio la primera casilla de la 5 fila :
NBN
BNB
NBN
BNB
BBN
que nos da este código :
5880477582
4880477582
vaya por fin ha cambiado la segunda fila,el primer dígito ha pasado de 5 a 4.
Y vemos que la primera fila es común a la primera fila del código por defecto.
Ahora cambio en el mapa la primera casilla de la primera fila :
BBN
BNB
NBN
BNB
BBN
Que nos da este resultado :
4880477582
4880477582
Juas, ahora son iguales,ha cambiado el primer dígito de la primera y la segunda fila.
Parece que si repites lo mismo en la fila 1 y en la 5 las lineas del código resultante son iguales.
y eso es por que siempre se guarda el mapa entero ,en este caso tal que así :
BBNBNBNB
BNBNBNBN
NBNBNBNB
BNBNBNBN
BBNBNBNB
NBNBNBNB
BNBNBNBN
NBNBNBNB
si separo el mapa en dos partes de 4 filas tal que así :
BBNBNBNB
BNBNBNBN
NBNBNBNB
BNBNBNBN
BBNBNBNB
NBNBNBNB
BNBNBNBN
NBNBNBNB
vemos que los dos bloques son identicos ,por eso las dos lineas de código son iguales.
Cada bloque es de 4x8 ,cada fila serán 8bits ,dando un total de 32bits,que pasado a int nos da un número de
diez cifras ,justo una fila del código.
Por lo cualo si pasamos un código de 10 cifras a binario ,nos dara 32bits de ceros y unos.
bien vamos a pasar la primera fila del código por defecto a binario :
5880477582 --> 101011110100000001111011110001110
lo ponemos en filas de 8 :
10101111
01000000
01111011
110001110
juasssssssssssss pero que pa que paassssaaaa ,me sobra un dígito!,es porque aunque el codigo sea de 10 cifras
al pasarlo a binario se pasa de 32bits y nos mete un byte más, si le ponemos 7 ceros por delante... :
00000001
01011110
10000000
11110111
10001110
cuadrar cuadra ,pero tenemos 5 filas jorr,mi gozo en un pozo xD.
hagámoslo al revés ,pongamos que cada bloque blanco del mapa es un 1 y cada bloque negro un 0.
01010101
10101010
01010101
10101010
si lo pasamos a decimal nos da : 1437226410 que no tiene nada que ver con el código por defecto :(.
otra prueba ,ahora cada bloque negro sea un 1 y el bloque blanco un 2 :
10101010
01010101
10101010
01010101
bien ,pasemoslo a decimal ---> 2857740885 y coño tampoco es, pero no os suena ? es el código por
defecto pero dado la vuelta ,veamos :
orginal 5880477582
conversion 2857740885
asi que vamos a probar a pasar a binario 2857740885 --> que nos devuelve esto :
10101010010101011010101001010101
que en filas es
10101010
01010101
10101010
01010101
os suena ? es el mapa por defecto.
Bien ahora creemos un mapa de 3x3 cambiado la primera casilla de la primera fila
y la primera casilla de la tercera fila :
001
010
001
resolvamoslo y veamos su código :
8435767582
4880477582
pasemos la primera fila a binario 8435767582 pero dandole la vuelta 2857675348 -->
10101010
01010100
10101010
01010100
umm no cuadra ,demosle la vuelta
00101010
01010101
00101010
01010101
y ahi lo tenemossssssssssssssss aleluyaaaaaaaaaaaaaa.
vamos que despues de todo este rollo, para covertir un código a mapa se coge la primera línea del código,
le damos la vuelta y la pasamos a binario ,una vez en binario la damos la vuelta y nos devolverá las 4 primeras
filas del mapa original.hacemos lo mismo con la segunda fila del código y yasta ,tenemos el mapa completo.
ahora solo queda investigar la tercera linea ,yo ahora me piro a sobar que me ha dejao loco el polarium,
lo mismo mañana me creo un servlet que te devuelva un imagen del mapa si le pasas los codigos.
pd:puede que haya idas de pinza en el escrito,es nomal ,estas horas son malasssss.....