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 D
y sus posibilidades de disparar y hacer una canasta son 0.1 0.2 0.3 0.4
respectivamente, independientemente del otro jugador en el concurso. Los dos jugadores al frente de la línea, A
y B
"pelea". Desde el A
principio, él es el defensor , está en peligro de ser eliminado y B
es el atacante , y no está en peligro de eliminación inmediata. A
dispara primero. Si A
lo logra, se A
ha defendido con éxito y va al final de la línea. La línea cambiaría a B C D A
. Si A
no lo logra, B
dispara. Si B
lo logra, entonces A
está fuera y B
va al final de la línea, por lo que la línea se convierte C D B
. Si ningunoA
ni B
lo hace, el proceso se repite, con A
disparar de nuevo, hasta que A
o B
hace una cesta.
Supongamos que la línea cambia a B C D A
( A
había defendido con éxito). Ahora, B
y C
"pelea", con B
ser el defensor y C
ser 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.2
o 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 A
y B
. Sea p
la probabilidad de que A gane. A
tiene una 2/3
posibilidad de defenderse con éxito (ya que existe la 1/2
posibilidad de que A
anote, una 1/4
oportunidad que A
falla y B
anota, y una 1/4
posibilidad de que ambos pierdan y el proceso se repita). Si A
no puede defenderse, es noqueado y B
gana. Si A
defiende, entonces la línea se convierte B A
. Como la situación es simétrica, la probabilidad de A
ganar es (1 - p)
. Obtenemos:
p = 2/3 * (1 - p) + 1/3 * 0
. Resolviendo, llegamos p = 2/5
. La salida debe ser 2/5 3/5
o 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)