Su tarea es calcular la probabilidad esperada de ganar para 2 jugadores en algún juego, cada uno con su propia calificación ELO . El jugador A tiene ELO R a y el jugador B tiene ELO R b
El puntaje esperado para el Jugador A (E a ) es: 1 / (1 + 10 (R b - R a ) / 400 ). Hay una ecuación similar para el jugador B (E b ): 1 / (1 + 10 (R a - R b ) / 400 ).
Si quieres una versión más copiable: 1 / (1 + 10^((a-b) / 400))
E a + E b debe ser igual a 1.
Por lo tanto, el puntaje para un jugador es su probabilidad esperada de ganar algún partido, en decimal.
Su programa / función debe tomar 2 entradas, ELO del jugador A y ELO del jugador B, e imprimir / devolver sus respectivas posibilidades de ganar en formato decimal. La salida debe sumar uno, y debe tener una precisión de al menos 5 decimales ( 0.00000
). Después de 5 decimales, es posible que tenga dígitos inexactos, siempre que las dos salidas sigan sumando una.
Ejemplos:
1200 2100 -> 0.005591967 0.994408033
1 1 -> 0.5 0.5
60 20 -> 0.557312 0.442688
9999 9998 -> 0.501439 0.498561
9999 1 -> 0.999999 0.000001
En el caso de prueba final, algunas respuestas usan exponenciación científica para representar el valor. Esto no es valido.
Puede ver aquí en el caso de prueba 3 que 0.557312
no es del todo exacto, porque 2
debería ser un 1
, pero esto está bien porque es después de cinco decimales y las salidas aún suman uno.
Este es un ejemplo de salida no válida:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Parece que satisface los requisitos a primera vista, pero los números se suman 1.00000000000000004
y, por lo tanto, la salida no es válida.
Los ceros finales en la salida están bien.
Puede suponer que el ELO de un jugador siempre será mayor que 0, y nadie tendrá un ELO mayor que 9999.
El formato de entrada y salida es flexible, pero la entrada y la salida aún deben estar en la base 10.
Como se trata de código de golf , ¡la respuesta con el recuento de bytes más bajo ganará!
[9999, 998]
que la mayoría de las respuestas parecen fallar.9999, 1
incluir la mía, por lo que no puedo publicarlo :-(Respuestas:
Jalea , 9 bytes
Pruébalo en línea! o Ver todos los casos de prueba.
La entrada es una matriz
[Ra, Rb]
y la salida es una matriz[Ea, Eb]
.Explicación
fuente
Python 3,
5547 bytes-8 bytes gracias a @math_junkie
fuente
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 bytes
Toma la entrada como una lista y genera una lista.
fuente
CJam , 23 bytes
Algunas otras soluciones de 23 bytes:
Pruébalo en línea!
Explicación
fuente
9999, 1
:(0.1 + 0.2 = 0.30000000000000004
. Lo investigaréC, 63 bytes
Define una macro parametrizada (bastante ingenua)
M
, el enfoque de trabajo más corto que se me ocurrió, pero probablemente aún no sea el más corto. Como tal, cualquier sugerencia de golf es muy apreciada.De todos modos, esto devuelve 2 valores de coma flotante
E_b
yE_a
, respectivamente.Pruébalo en línea!
fuente
9999, 1
JavaScript (ES7),
4135 bytesGuardado 6 bytes gracias a @Neil
fuente
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.Lenguaje de macros SAS, 70 bytes
La salida es un conjunto de datos SAS donde las variables
p
yq
las posibilidades de los jugadores de ganar. Se pueden guardar 11 bytes eliminando elprint
procedimiento.fuente
C #, 92 bytes
No es el más corto, pero es C #, nunca el más corto.
Golfed
Sin golf
fuente
q, 26 bytes
Ejemplo
fuente