Twoim zadaniem jest obliczenie oczekiwanej szansy wygranej dla 2 graczy w każdej grze, każdy z własną oceną ELO . Gracz A ma ELO R a, a gracz B ma ELO R b
Oczekiwany wynik dla Gracza A (E a ) to: 1 / (1 + 10 (R b - R a ) / 400 ). Podobne jest równanie dla Gracza B (E b ): 1 / (1 + 10 (R a - R b ) / 400 ).
Jeśli chcesz wersji do skopiowania: 1 / (1 + 10^((a-b) / 400))
E a + E b powinny być równe 1.
Dlatego wynikiem dla gracza jest spodziewana szansa na wygraną w części dziesiętnej.
Twój program / funkcja powinna przyjąć 2 dane wejściowe, ELO Gracza A i ELO Gracza B, i wydrukować / zwrócić odpowiednią szansę na wygraną w formacie dziesiętnym. Dane wyjściowe muszą się sumować do jednego, a dokładność musi wynosić co najmniej 5 miejsc po przecinku ( 0.00000
). Po 5 miejscach dziesiętnych możesz mieć niedokładne cyfry, pod warunkiem, że dwa wyjścia nadal będą sumować się do jednego.
Przykłady:
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
W ostatnim przypadku testowym niektóre odpowiedzi wykorzystują potęgowanie naukowe w celu przedstawienia wartości. To nie jest poprawne.
Możesz zobaczyć tutaj przypadek testowy 3, który 0.557312
nie jest całkiem dokładny, ponieważ 2
powinien być a 1
, ale jest w porządku, ponieważ jest po pięciu miejscach dziesiętnych, a wyniki wciąż sumują się do jednego.
To jest przykład niepoprawnego wyjścia:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Wygląda na to, że spełnia wymagania na pierwszy rzut oka, ale liczby się sumują 1.00000000000000004
i dlatego wynik nie jest prawidłowy.
Końcowe zera w danych wyjściowych są w porządku.
Możesz założyć, że ELO gracza będzie zawsze większe od 0 i nikt nie będzie miał ELO wyższego niż 9999.
Format wejściowy i wyjściowy jest elastyczny, ale dane wejściowe i wyjściowe muszą nadal znajdować się w bazie 10.
Ponieważ jest to gra w golfa , wygrywa odpowiedź o najniższej liczbie bajtów!
[9999, 998]
którego większość odpowiedzi wydaje się nieudana.9999, 1
tym moje, więc nie mogę tego opublikować :-(Odpowiedzi:
Galaretka , 9 bajtów
Wypróbuj online! lub Wyświetl wszystkie przypadki testowe.
Dane wejściowe to tablica,
[Ra, Rb]
a dane wyjściowe to tablica[Ea, Eb]
.Wyjaśnienie
źródło
Python 3,
5547 bajtów-8 bajtów dzięki @math_junkie
źródło
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 bajtów
Pobiera dane wejściowe jako listę i wyświetla listę.
źródło
CJam , 23 bajty
Inne 23 bajtowe rozwiązania:
Wypróbuj online!
Wyjaśnienie
źródło
9999, 1
0.1 + 0.2 = 0.30000000000000004
. Przyjrzę się temuC, 63 bajty
Definiuje (raczej naiwne) sparametryzowane makro
M
, najkrótsze działające podejście, jakie mogłem wymyślić, ale prawdopodobnie nadal nie najkrótsze. Jako takie, wszelkie sugestie dotyczące gry w golfa są bardzo mile widziane.W każdym razie zwraca 2 wartości zmiennoprzecinkowe
E_b
iE_a
odpowiednio.Wypróbuj online!
źródło
9999, 1
JavaScript (ES7),
4135 bajtówZaoszczędź 6 bajtów dzięki @Neil
źródło
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.SAS Macro Language, 70 bajtów
Dane wyjściowe to zestaw danych SAS, w którym zmienne
p
iq
szanse graczy na wygraną. 11 bajtów można zapisać, usuwającprint
procedurę.źródło
C #, 92 bajty
Nie najkrótszy, ale C #, nigdy najkrótszy ..
Grał w golfa
Nie golfił
źródło
q, 26 bajtów
Przykład
źródło