Votre tâche consiste à calculer les chances de gagner pour 2 joueurs dans un jeu, chacun avec sa propre cote ELO . Le joueur A a ELO R a et le joueur B a ELO R b
Le score attendu pour le joueur A (E a ) est: 1 / (1 + 10 (R b - R a ) / 400 ). Il existe une équation similaire pour le joueur B (E b ): 1 / (1 + 10 (R a - R b ) / 400 ).
Si vous voulez une version plus copiable: 1 / (1 + 10^((a-b) / 400))
E a + E b doit être égal à 1.
Par conséquent, le score d'un joueur est sa chance attendue de gagner un match, en décimal.
Votre programme / fonction doit prendre 2 entrées, ELO du joueur A et ELO du joueur B, et imprimer / retourner leurs chances respectives de gagner au format décimal. La sortie doit s'additionner à un et vous devez être précis à au moins 5 décimales ( 0.00000
). Après 5 décimales, vous pouvez avoir des chiffres inexacts, à condition que les deux sorties s'ajoutent toujours à une.
Exemples:
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
Dans le dernier cas de test, certaines réponses utilisent l'exponentiation scientifique pour représenter la valeur. Ce n'est pas valable.
Vous pouvez voir dans le cas de test 3 ici que ce 0.557312
n'est pas tout à fait précis, car le 2
devrait être un 1
, mais c'est très bien car il est après cinq décimales et les sorties s'ajoutent toujours à un.
Ceci est un exemple de sortie non valide:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Il semble que cela satisfasse les exigences à première vue, mais les chiffres s'additionnent 1.00000000000000004
et donc la sortie n'est pas valide.
La fin des zéros dans la sortie est correcte.
Vous pouvez supposer que l'ELO d'un joueur sera toujours supérieur à 0 et que personne n'aura un ELO supérieur à 9999.
Le format d'entrée et de sortie est flexible, mais l'entrée et la sortie doivent toujours être en base 10.
Comme il s'agit de code-golf , la réponse avec le nombre d'octets le plus bas gagnera!
[9999, 998]
lequel la plupart des réponses semblent échouer.9999, 1
y compris la mienne, donc je ne peux pas la poster :-(Réponses:
Gelée , 9 octets
Essayez-le en ligne! ou Afficher tous les cas de test.
L'entrée est un tableau
[Ra, Rb]
et la sortie est un tableau[Ea, Eb]
.Explication
la source
Python 3,
5547 octets-8 octets grâce à @math_junkie
la source
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 octets
Prend les entrées sous forme de liste et sort une liste.
la source
CJam , 23 octets
Quelques autres solutions de 23 octets:
Essayez-le en ligne!
Explication
la source
9999, 1
:(0.1 + 0.2 = 0.30000000000000004
. Je vais y jeter un œilC, 63 octets
Définit une macro paramétrée (plutôt naïve)
M
, l'approche de travail la plus courte à laquelle je pouvais penser mais probablement pas la plus courte. En tant que tel, toutes les suggestions de golf sont grandement appréciées.Quoi qu'il en soit, cela renvoie respectivement 2 valeurs à virgule flottante
E_b
etE_a
.Essayez-le en ligne!
la source
9999, 1
JavaScript (ES7),
4135 octets6 octets enregistrés grâce à @Neil
la source
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.SAS Macro Language, 70 octets
La sortie est un ensemble de données SAS où les variables
p
etq
sont les chances des joueurs de gagner. 11 octets peuvent être enregistrés en supprimant laprint
procédure.la source
C #, 92 octets
Pas le plus court, mais c'est C #, jamais le plus court ..
Golfé
Non golfé
la source
q, 26 octets
Exemple
la source