#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.
#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.
A ver si les va mi propuesta. Los pasos serían los siguientes:
a) Se numeran las casillas del 0 al 63, y las filas y columnas de 0 a 7. Cada casilla toma el valor numérico asignado.
b) Se realiza un XOR binario (bit por bit) de los valores de todas las casillas marcadas con 1 (por ejemplo con fichas blancas), obteniendo lo que llamaremos "valor actual", que es un número de 6 bits, entre 0 y 63.
c) Se realiza un XOR del valor actual con el valor deseado, que es otro número de 6 bits con el valor de la casilla elegida por el director, obteniendo el número de casilla de la ficha que hay que invertir.
d) Se da vuelta la ficha de la casilla del resultado
e) El nuevo valor actual, calculado como en el paso b), es el número de la casilla elegida por el director. El segundo preso sólo tiene que calcular dicho valor a partir de la configuración del tablero.
Expresando los valores en numeración octal, el primer dígito equivaldrá al de la fila y el segundo dígito al de la columna.