Hay muchos acertijos de prisioneros y no está claro a cuál versión base te estás refiriendo. En una de las versiones que conozco (que es más general), la declaración es diferente, pero la solución también funciona para tu pregunta ya que es un caso especial. Involucra lo que creo que llamas "sumas módulo", por lo que me pregunto si esa versión es la versión base a la que te estás refiriendo. Dicho esto, al final de esta respuesta también exploro otras interpretaciones de la declaración del problema...
Sea $x_k$ el número en la espalda del prisionero $k\in\{0,\cdots,N-1\}$, y sea $s_k$ el número gritado. Los $N+1$ números son permutaciones de $\{0,\cdots,N\}$ (comienzo con un índice 0 en lugar de 1 como en tu declaración para aliviar los ajustes a la aritmética de módulo, pero el problema es equivalente). La estrategia es la siguiente:
- el primer prisionero se sacrifica a sí mismo para dar a todos los otros prisioneros la información que necesitan gritando el módulo N+1 de la suma de los números que ven delante de ellos, es decir: $$ s_0=\left(\sum\limits_{j>1}x_j\right)\mod (N+1) $$
- el segundo prisionero ahora sabe que: $$ \left(x_1+\sum\limits_{j>1}x_j\right)\mod (N+1)=s_0 $$ y así resuelve para $x_1$
- el prisionero $k$ resolverá $$ \left(x_k+\sum\limits_{0k}x_j\right)\mod (N+1)=s_0 $$ porque, comenzando con $j=1$, saben que $s_j=x_j$
Para convencerte de que esto funciona, puedes consultar esta hoja de cálculo de Google que hice. Aparte del botón de randomización que llama a un script, toda la lógica está implementada como fórmulas y puedes comprobar que cada prisionero solo utiliza el conocimiento a su disposición, es decir los gritos previos (si los hay) y los números en las espaldas de los que están después de ellos. (En particular, para aquellos que no quieren confiar en el script, o si el script no está activo por alguna razón, simplemente puedes cambiar los valores aleatorios manualmente.)
Estoy un poco confundido por tu declaración de "cada número solo puede ser dicho en voz alta una vez", y dadas los comentarios y lo antigua que es tu pregunta, deduzco que esto se agregó para evitar que los prisioneros tuvieran una segunda oportunidad de decir un número si se equivocaban la primera vez. (Esto fue sugerido en una de las respuestas, pero el acertijo entonces es trivial ya que todos los jugadores pueden resolver con certeza en 2 suposiciones dado que solo hay 2 incógnitas cada vez.) Dicho esto, si realmente quisiste decir que un número específico solo podía ser llamado una vez, entonces la solución anterior puede ser ajustada haciendo que el primer prisionero grite $s_0^*=s_0+(N+1)$, que es un número que no puede estar en la espalda de ningún prisionero.
Si, por otro lado, la declaración del problema es que el primer prisionero solo tiene la opción entre dos números, es decir el número en su espalda o el número faltante, entonces te pediría que revisaras la declaración del problema:
- estudiemos el caso para el prisionero $k>0$. Suponiendo que todos los prisioneros, excepto el primero, pudieron adivinar correctamente $s_j=x_j, \forall 0 con certeza, entonces a $k$ le quedan dos números sin explicación: o bien $x^*$ y $x_k$ si $s_0=x_0$, o bien $x_0$ y $x_k$ si $s_0=x^*$.
- de cualquier manera, la información sobre cuál elegir debe ser codificada de alguna manera, pero los prisioneros anteriores no codifican nada: simplemente eligen $s_j=x_j$, lo cual ayuda para el registro pero no dice nada sobre esos dos valores.
- el único prisionero capaz de codificar esa información es el primero, y puede hacerlo si tiene un "lenguaje" lo suficientemente grande para codificar esa información (como en la primera parte de esta respuesta, en la que hay $N+1$ valores para elegir para expresar esa información).
- sin embargo, si la elección para ese prisionero es binaria entre $x^*$ y $x_0$, solo se puede transmitir un bit de información. Eso puede ayudar al prisionero 2 a tomar la elección correcta, pero no es suficiente para ayudar a todos los prisioneros siguientes.
Esto, por supuesto, deja la puerta abierta a algunos "trucos", como pasar información de otras maneras (por ejemplo, inflexión de voz, etc.), pero mi impresión es que la declaración correcta es de hecho aquella para la que la primera parte de esta respuesta proporciona una solución.
0 votos
Para ser claro, no conozco la solución. Me dieron la adivinanza y estoy viendo si alguien más la conoce.
1 votos
¿Entonces cada prisionero puede gritar varios números? ¿Qué quieres decir con "una vez que haya adivinado su número correctamente"? ¿O debería ser "Si adivina su número correctamente"?
0 votos
Entonces estás diciendo que si el primero adivina sus números correctamente, los demás podrán adivinar los suyos y estar 100% seguros al respecto? ¿Estás asumiendo que escucharon su suposición correcta, y ahora la persona $99$ sabe todos los números delante de él, incluido el número que la persona $100$ detrás de él adivinó correctamente? Esto deja dos números desconocidos para la persona $99$, el suyo propio y el que falta. ¿No lo deja esto en la misma situación que la persona $100$? Y ¿qué quieres decir con "una vez que adivinó su número..." cuántas suposiciones tienen entonces? Creo que necesitas ser más claro acerca de ciertas cosas aquí.
0 votos
@Matta, no necesariamente -- la primera prisionera puede basar cuál de sus 2 opciones elige en función de los números que ve frente a ella. De esta manera, puede comunicar información a las otras prisioneras. (De hecho, con 2 jugadores y 3 números, el juego es bastante fácil: la primera prisionera grita el número que ve frente a ella, menos 1 módulo 3, y la prisionera frente a ella puede invertir eso.)
0 votos
@Ove si, él solo tiene una oportunidad para gritar su número así que debería corregirse a si.
0 votos
@Mees tiene la idea correcta, creo. ¿Sabes cómo funciona entonces cuando hay 101 números y 100 prisioneros? ¿Ves el número más bajo o más alto que no tienes delante de ti y haces algo módulo 101? No puedo entender cómo abordarlo una vez que se vuelve más complejo que con dos personas.