Knockout es un juego de baloncesto donde los jugadores se turnan para disparar. Se juega como una secuencia de concursos de dos jugadores, cada uno de los cuales tiene la posibilidad de "noquear" a uno de esos jugadores.
Supongamos que los jugadores son A B C Dy sus posibilidades de disparar y hacer una canasta son 0.1 0.2 0.3 0.4respectivamente, independientemente del otro jugador en el concurso. Los dos jugadores al frente de la línea, Ay B"pelea". Desde el Aprincipio, él es el defensor , está en peligro de ser eliminado y Bes el atacante , y no está en peligro de eliminación inmediata. Adispara primero. Si Alo logra, se Aha defendido con éxito y va al final de la línea. La línea cambiaría a B C D A. Si Ano lo logra, Bdispara. Si Blo logra, entonces Aestá fuera y Bva al final de la línea, por lo que la línea se convierte C D B. Si ningunoAni Blo hace, el proceso se repite, con Adisparar de nuevo, hasta que Ao Bhace una cesta.
Supongamos que la línea cambia a B C D A( Ahabía defendido con éxito). Ahora, By C"pelea", con Bser el defensor y Cser el atacante. Este proceso se repite hasta que solo quede una persona. Esa persona es la ganadora.
Su tarea es calcular las probabilidades de que cada persona gane dada la posibilidad de que hagan una canasta.
Entrada :
Una lista de los números, tales como 0.1 0.2o 0.5 0.5 0.5 0.5, donde el n º número es la posibilidad de que el n º jugador hará una cesta. Puede tomar esta entrada en cualquier formato que desee, incluidos los parámetros de una función.
Salida :
Una lista de los números, donde el n º número es la posibilidad de que el n º jugador ganará el juego. Sus números deben tener una precisión de al menos dos decimales al menos el 90% del tiempo. Esto significa que puede usar un enfoque basado en simulación. Sin embargo, si su código no se basa en la simulación (se garantiza que devolverá una respuesta correcta al menos con 6 decimales), elimine el 30% de su puntaje.
Ejemplo entre 0.5 0.5: Llamar a los jugadores Ay B. Sea pla probabilidad de que A gane. Atiene una 2/3posibilidad de defenderse con éxito (ya que existe la 1/2posibilidad de que Aanote, una 1/4oportunidad que Afalla y Banota, y una 1/4posibilidad de que ambos pierdan y el proceso se repita). Si Ano puede defenderse, es noqueado y Bgana. Si Adefiende, entonces la línea se convierte B A. Como la situación es simétrica, la probabilidad de Aganar es (1 - p). Obtenemos:
p = 2/3 * (1 - p) + 1/3 * 0. Resolviendo, llegamos p = 2/5. La salida debe ser 2/5 3/5o 0.4 0.6.
No soy lo suficientemente bueno con la probabilidad de hacer ejemplos más complejos.
Si necesita más casos de prueba, aquí hay algunos:
0.1 0.2 0.3 0.4 --> 0.01 0.12 0.25 0.62
0.99 0.99 --> 0.5 0.5 (it's not exact, but if you round to two decimal places, you get 0.5 and 0.5)
fuente
