Adivinando bit aleatorio con 100% de precisión [cerrado]

12

Pronto voy a comenzar mi servicio militar obligatorio. Me inscribí en la Unidad de Guerra Cibernética del ejército finlandés. Hubo una prueba para los solicitantes. Desde que se realiza el examen, las preguntas se han publicado aquí: enlace

Aquí está la pregunta 4:

  

Dos programas completamente aislados obtienen un bit aleatorio cada uno de diferentes generadores de números aleatorios de hardware. Después de obtener el bit, cada programa adivina cuál fue el bit aleatorio del otro programa. Los programas pueden ser diferentes y usar diferentes estrategias para adivinar. Después de ejecutarlos una vez, si al menos un programa se adivinó correctamente, el autor de los programas recibe un premio.

     

¿Es posible diseñar una estrategia que ofrezca un 100% de posibilidades de ganar el premio? Si es así, explique la estrategia.

Respondí no porque no pude averiguar la estrategia ganadora. ¿Esa fue la respuesta correcta o me perdí algo?

    
pregunta JV JV 17.07.2015 - 16:50
fuente

5 respuestas

68

En realidad, hay una solución que siempre tendrá éxito: el programa A adivinará lo contrario al valor que recibe, el programa B adivinará el mismo valor que el que recibe.

También puedes pensar en eso como tal: A adivina que recibirán números diferentes; B adivina que reciben lo mismo. Uno de ellos está destinado a ser correcto. Si observa la siguiente tabla (r para recibir, g para adivinar), verá que A o B siempre tienen la razón (* denota la respuesta correcta):

rA | rB | gA | gB
0     0    1    0*
0     1    1*   1
1     0    0*   0
1     1    0    1*
    
respondido por el helm 17.07.2015 - 17:39
fuente
5

Ya que esta parece una pregunta con truco, aquí hay una respuesta con truco (es decir, es "hacer trampa").

Deje que el programa A haga lo siguiente:

  • Si recibe un 0, salga "1" y salga.
  • De lo contrario, realice un bucle para siempre, hasta que se reciba una señal "Ctrl-C", en cuyo caso el programa genera "0" y sale.

Deje que el programa B haga lo siguiente:

  • Si recibe un 0, salga "0" y salga.
  • De lo contrario, realice un bucle para siempre, hasta que se reciba una señal "Ctrl-C", en cuyo caso el programa emite "1" y sale.

Análisis:

  • Si ambos programas obtienen un 0, el programa B muestra "0", lo cual es correcto - > ganar.
  • Si el programa A obtiene un 0 y el programa B obtiene un 1, el programa A genera "1", que es correcto - > ganar.
  • Si el programa A obtiene un 1 y el programa B obtiene un 0, entonces el programa A se repite para siempre mientras que el programa B emite "0" (lo cual es incorrecto); en algún momento, el operador que ejecuta el experimento pierde la paciencia, escribe Ctrl-C en el programa A que ejecuta la terminal, y ve "0", que es una respuesta correcta - > ganar.
  • Si ambos programas obtienen un 1, ambos programas se intercalarán para siempre. El operador intenta matar a ambos con Ctrl-C, en cuyo punto el programa A produce 0 y el programa B produce 1; este último es correcto - > ganar.

Y voilà! una estrategia 100% ganadora.

Edita: y si olvidas todo el asunto de "esperar hasta Ctrl-C", entonces obtienes esencialmente la respuesta de @ Helm, que es correcta y mucho menos complicada. El único punto de ese proceso de espera es obtener un canal lateral mediante el cual un programa no solo adivine el valor, sino que también "sepa" que adivinó el valor (que de todos modos no es parte del desafío).

    
respondido por el Tom Leek 17.07.2015 - 17:37
fuente
-3

Estás en lo correcto. Lo más cerca que podría acercarse sería un 75% de probabilidad de que al menos una de ellas sea correcta, con ambas computadoras siempre adivinando la negación de la otra.

    
respondido por el Travis Gunderson 17.07.2015 - 17:06
fuente
-3

Como se trata de una guerra de información, me pregunto si se permiten escenarios con "trampa". Puede haber un artefacto a nivel del sistema que los programas pueden verificar después de que se genere el número aleatorio o que uno de los programas pueda conectarse a ese proceso, monitorearlo.

Los requisitos dicen que los programas están aislados entre sí, pero no necesariamente en sistemas separados. Es posible que pueda detectar o influir en el valor semilla utilizado por la otra aplicación también si ambos están en el mismo sistema. Si está escribiendo ambas aplicaciones, podría hacer que cada aplicación imprima el valor y deje que el otro sistema lea ese valor. Incluso si se encuentran en cuadros separados, en teoría podría proponer una solución que use algún tipo de control térmico o acústico. .

Creo que la palabra "adivinar" es un rechazo, no puedes tener ninguna certeza si solo estás adivinando. Esta pregunta suena más como una forma de pensar acerca de las diferentes formas de romper la influencia del sistema y también de cómo influir o predecir valores aleatorios.

    
respondido por el Eric G 17.07.2015 - 17:13
fuente
-3

NO no es posible adivinar un bit generado aleatoriamente, con el 100% de precisión, estarás en la mitad del tiempo en promedio.

Edit: Estoy de acuerdo en que estoy equivocado, leí la pregunta como propietario de uno solo de los programas. Si posee ambos, cada uno será correcto la mitad del tiempo, por lo tanto, en promedio siempre.

    
respondido por el Pieter 17.07.2015 - 23:51
fuente

Lea otras preguntas en las etiquetas