Ihre Aufgabe ist es, die erwartete Gewinnchance für 2 Spieler in einem Spiel mit jeweils eigener ELO-Bewertung zu berechnen . Spieler A hat ELO R a und Spieler B hat ELO R b
Die erwartete Punktzahl für Spieler A (E a ) beträgt: 1 / (1 + 10 (R b - R a ) / 400 ). Für Spieler B (E b ) gibt es eine ähnliche Gleichung : 1 / (1 + 10 (R a - R b ) / 400 ).
Wenn Sie eine kopierbarere Version wünschen: 1 / (1 + 10^((a-b) / 400))
E a + E b sollte gleich 1 sein.
Daher ist die Punktzahl für einen Spieler die erwartete Chance, ein Match zu gewinnen, dezimal.
Ihr Programm / Ihre Funktion sollte zwei Eingaben annehmen, die ELO von Spieler A und die ELO von Spieler B, und die jeweilige Gewinnchance im Dezimalformat drucken / zurückgeben. Die Ausgabe muss sich zu eins addieren und Sie müssen auf mindestens 5 Dezimalstellen genau sein ( 0.00000
). Nach 5 Dezimalstellen haben Sie möglicherweise ungenaue Ziffern, vorausgesetzt, die beiden Ausgänge ergeben immer noch eine.
Beispiele:
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
Im letzten Testfall verwenden einige Antworten wissenschaftliche Exponentiation, um den Wert darzustellen. Dies ist nicht gültig.
Sie können in Testfall 3 hier sehen, dass dies 0.557312
nicht ganz genau ist, da das a 2
sein sollte 1
, aber dies ist in Ordnung, da es nach fünf Dezimalstellen liegt und die Ausgaben immer noch eins ergeben.
Dies ist ein Beispiel für eine ungültige Ausgabe:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Dies scheint auf den ersten Blick die Anforderungen zu erfüllen, aber die Zahlen summieren sich 1.00000000000000004
und daher ist die Ausgabe ungültig.
Nachgestellte Nullen in der Ausgabe sind in Ordnung.
Sie können davon ausgehen, dass der ELO eines Spielers immer größer als 0 ist und niemand einen ELO von mehr als 9999 hat.
Das Eingabe- und Ausgabeformat ist flexibel, aber die Eingabe und Ausgabe muss sich noch in Basis 10 befinden.
Da dies Code-Golf ist , gewinnt die Antwort mit der niedrigsten Byteanzahl!
[9999, 998]
die meisten Antworten fehlschlagen.9999, 1
einschließlich meiner eigenen, fehlschlagen , daher kann ich sie nicht posten :-(Antworten:
Gelee , 9 Bytes
Probieren Sie es online aus! oder Alle Testfälle anzeigen.
Die Eingabe ist ein Array
[Ra, Rb]
und die Ausgabe ist ein Array[Ea, Eb]
.Erläuterung
quelle
Python 3,
5547 Bytes-8 Bytes dank @math_junkie
quelle
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 Bytes
Nimmt die Eingabe als Liste und gibt eine Liste aus.
quelle
CJam , 23 Bytes
Einige andere 23-Byte-Lösungen:
Probieren Sie es online aus!
Erläuterung
quelle
9999, 1
0.1 + 0.2 = 0.30000000000000004
. Ich werde es untersuchenC 63 Bytes
Definiert ein (eher naives) parametrisiertes Makro
M
, den kürzesten Arbeitsansatz, den ich mir vorstellen kann, aber wahrscheinlich immer noch nicht den kürzesten. Daher werden alle Golfvorschläge sehr geschätzt.Wie auch immer, gibt diese 2 Gleitkommawerte,
E_b
undE_a
, respectively.Probieren Sie es online aus!
quelle
9999, 1
JavaScript (ES7),
4135 Byte6 Bytes dank @Neil gespeichert
quelle
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.SAS-Makrosprache, 70 Byte
Die Ausgabe ist ein SAS-Datensatz, in dem Variablen
p
undq
die Gewinnchance der Spieler angegeben sind. Durch Entfernen derprint
Prozedur können 11 Bytes gespeichert werden.quelle
C #, 92 Bytes
Nicht das kürzeste, aber es ist C #, niemals das kürzeste.
Golf gespielt
Ungolfed
quelle
q 26 Bytes
Beispiel
quelle