#36#37 Probé corregir el programa para representar correctamente la propuesta #20 y, cambiando algunos valores posicionales y eliminando algunas transformaciones conseguí que funcione bien para todos los casos. Es decir que la propuesta es correcta, aunque un poco más complicada que la otra. Avisen si les interesa que publique la planilla.
Bueno, pongo aquí la solución con la que di yo. Mi planteamiento fue hacerlo primero para 2x2, luego extenderlo para 4x4 y por último a 8x8. Mi solución es más fea que las anteriores. Copio lo que escribí en otro sitio (editando algún detalle), pero antes de copiar os comento que el problema me lo contaron con en vez de un tablero, 64 presos dispuestos en filas y columnas y en vez de una ficha de reversi, pues con un sombrero negro o blanco. El alcaide elige a una persona, el primer preso le cambia el gorro a alguien y el segundo debe adivinar el elegido por el alcaide. Vamos, lo mismo:
Si pensamos en un número binario de 64 cifras, la idea al final es que debes de poder agrupar los 2^64 números posibles binarios en 64 grupos (de igual tamaño) de forma que dado un número cualquiera (menor que 2^64) puedas con una operación de cambiar una cifra llevarlo siempre al grupo que quieras.
Y como no se me ocurría directamente, lo hago usando base 2 (binario), base 4 y base 16.
Primero te digo cómo tiene que traducir el segundo el preso señalado:
Lo primero es de los 64 presos hacer 16 grupos de 4 presos (podría hacerse haciendo matrices de 2x2). Cambiando un color por 1 y el otro por 0, cada matriz es un número binario que al pasarlo a decimal queda entre 0 y 15. Y hacemos esta asignación:
0, 1, 14 y 15 van a 0
2, 3, 12 y 13 van a 1
4, 5, 10 y 11 van a 2
6, 7, 8 y 9 van a 3.
Explico por qué esta asignación. Observad el primer grupo, en binario son 0000, 0001, 1110 y 1111. Observad que entre estos 4 números no hay 2 que se diferencien en exactamente 2 cifras. Y lo mismo pasa con los otros 3 grupos. Y gracias a ello observad que dado un número binario abcd, es imposible que podamos mandarlo por ejemplo al mismo grupo de dos formas distintas cambiando una cifra, ya que de ser así los dos números obtenidos se diferenciarían exactamente en 2 cifras. Así que los 4 números que se pueden generar a partir de abcd cambiando una cifra tienen que ir a conjuntos distintos y por… » ver todo el comentario
#34 Sí, lo ví, y me asombró un poco haber llegado prácticamente al mismo procedimiento por vías distintas. Yo llegué a armar la planilla que adjunté en #33 al intentar programar el procedimiento de #20, pero se producían errores en algunos casos. Luego decidí tomar la idea básica de #3 pero aplicando la operación XOR (que estaba usando para las "transformaciones") en lugar de la suma. No se me hubiese ocurrido sin esos aportes.
Para empezar #20 ha encontrado una solución, que explica mejor en #24.
Él dice que con 57 casillas puede asignarle a cada casilla todas las operaciones posibles de girar al menos 2 fichas de 6 dadas. Esto lo podría hacer escribiendo de la casilla 8 a la 63 su número en binario y cada 1 representaría un giro (por ejemplo 010011 sería girar la moneda 1, 2 y 5). Haciéndolo así lo que tienes que hacer al final es tras ver todas las casillas con giro (las del color acordado), pasarlas a binario, y con todos los números obtenidos ver las veces que sale el 1 en cada cifra. Si el 1 sale un número impar de veces en las unidades indicaría que la ficha 1 se giraría y así.
Comento esto porque si lo entendéis, será más fácil entender la solución que a mi me pasaron:
Resulta que no me acordaba y la he mirado después de ver la de @jgbmur y pensar en lo de ponerlo en binario, y me encuentro con que en esa solución se usa una idea muy parecida. Pero en un principio es una solución distinta.
Y por si fuera poco, me vengo aquí a escribir este comentario y me encuentro con #30, que parece que habla en chino pero es lo mismo que la solución que he enlazado, donde viene explicado con mucho detalle.
Mañana pongo mi solución, que en un principio es distinta.