ELO 등급 예상 점수 계산


11

당신의 임무는 각각 자신의 ELO 등급을 가진 일부 게임에서 2 명의 플레이어가 이길 가능성을 계산하는 것 입니다. 플레이어 A에는 ELO R a가 있고 플레이어 B에는 ELO R b가 있습니다

플레이어 A (E에 대한 예상 점수 a는 ) : 1 / (1 + 10 (R B - R의 ) / 400 ). 플레이어 B (E b ) 와 비슷한 방정식이 있습니다 : 1 / (1 + 10 (R a -R b ) / 400 ).

더 복사 가능한 버전을 원한다면 : 1 / (1 + 10^((a-b) / 400))

E a + E b 는 1과 같아야합니다.

따라서, 플레이어의 점수는 십진법으로 어떤 경기에서 이길 것으로 예상됩니다.

프로그램 / 기능은 2 개의 입력, 플레이어 A의 ELO 및 플레이어 B의 ELO를 가져와 각각 10 진수 형식으로 이길 수있는 기회를 인쇄 / 반환해야합니다. 출력 1을 더해야하며 소수점 5 자리 ( 0.00000) 이상 정확해야합니다 . 소수점 이하 5 자리 이후에도 두 출력이 여전히 1을 더하면 부정확 한 숫자가 표시 될 수 있습니다.

예 :

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

최종 테스트 사례에서 일부 답변은 과학적 지수를 사용하여 값을 나타냅니다. 유효하지 않습니다.

테스트 사례 3 0.557312에서는 정확하지 않은 것을 볼 수 있습니다. 왜냐하면는 2이어야 하기 때문입니다. 1그러나 소수점 이하 다섯 자리 뒤에 있고 출력이 여전히 1을 더하기 때문에 괜찮습니다.

이것은 유효하지 않은 출력의 예입니다.

9999 9998 -> 0.5014391117091516, 0.49856088829084844

이것은 처음에 요구 사항을 충족시키는 것처럼 보이지만 숫자가 더해져 1.00000000000000004출력이 유효하지 않습니다.

출력의 후행 0이 좋습니다.

플레이어의 ELO가 항상 0보다 크다고 가정 할 수 있으며 ELO가 9999보다 높은 사람은 없습니다.

입력 및 출력 형식은 유연하지만 입력 및 출력은 여전히 ​​기본 10이어야합니다.

이것이 이므로 바이트 수가 가장 적은 답변이 이길 것입니다!


1
ELO 등급은 +1이지만, 대신 Elo 등급이라는 것을 말하는 것이 실망 스럽습니다.
대런 링거

또한 [9999, 998]대부분의 답변이 실패한 것으로 보이는 테스트 사례 를 추가해야 합니다.
Emigna

@Emigna는 추가했지만 더 극단적으로 만들었습니다.)
Okx

@Okx : 좋습니다. 그 중 하나를 처리하기 위해 드로잉 보드로 돌아 가야합니다. :)
Emigna

9999, 1내 답변을 포함하여 모든 답변이 실패한 것처럼
보이므로

답변:


5

젤리 , 9 바이트

÷400⁵*÷S$

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 봅니다.

입력은 배열 [Ra, Rb]이고 출력은 배열 [Ea, Eb]입니다.

설명

÷400⁵*÷S$  Input: array [Ra, Rb]
÷400       Divide each by 400, makes [Ra/400, Rb/400]
    ⁵*     Raise 10 to that power, makes [10^(Ra/400), 10^(Rb/400)]
        $  Monadic chain operating on previous result
      ÷      Divide each by
       S     The sum of the whole
           Makes [10^(Ra/400)/(10^(Ra/400) + 10^(Rb/400)),
                  10^(Rb/400)/(10^(Ra/400) + 10^(Rb/400))]
               = [1/(1 + 10^((Rb-Ra)/400)), 1/(1 + 10^((Ra-Rb)/400))]


@Okx 과학적 표기법입니다. 원래 입 / 출력 형식이 우리에게 달려 있다고 말한 후 표준 표기법을 요구하도록 과제를 편집했기 때문에 그것이 무엇인지 알 것입니다.
마일

다른 결과를 보았습니까? 1.0입니다!
Okx


3

MATL, 11 바이트

10i400/^ts/

입력을 목록으로 가져 와서 목록을 출력합니다.

10       % push number literal
i        % push input
400      % push number literal
/        % divide the list (by 400)
^        % power (10^list, element wise)
t        % duplicate the list
s        % sum the second one
/        % divide by the sum
         % (implicit) convert to string and display

1

CJam , 23 바이트

XAq~_W%\.m400df/f#:)f/p

다른 23 바이트 솔루션 :

q~_W%\.m400df{/A\#)W#}p
Aq~_W%\.m400df/f{#)W#}p

온라인으로 사용해보십시오!

설명

X                        Push 1
 A                       Push 10
  q~                     Push an eval the input, a list containing 2 numbers
    _W%                  Duplicate the list and reverse it
       \                 Swap top stack elements, so the order of answers matches the input
        .m               Vectorized subtraction: computes Ra - Rb and Rb - Ra
          400d           Push 400.0 (must be a double, otherwise / performs integer division)
              f/         Divide both values by 400
                f#       Raise 10 to the power of both numbers
                  :)     Increment both numbers
                    f/   Divide 1 by both numbers
                      p  Output the list nicely

에 실패 9999, 1:(
Metoniem

@Metoniem 그것은 이상합니다 ... 반올림 문제와 관련이 있거나 어쩌면 how와 같은 것이 0.1 + 0.2 = 0.30000000000000004있습니다. 나는 그것에 대해 살펴볼 것이다
Business Cat

실제로 실제로는 잘 보입니다. Google 계산기를 포함한 모든 답변은 코드와 동일한 결과를 반환합니다. 테스트 케이스가 잘못
되었다고

1

C, 63 바이트

#define M(a,b)1/(1+pow(10,(a-b)/400.)),1/(1+pow(10,(b-a)/400.))

(순진한) 매개 변수화 된 매크로를 정의합니다 M내가 생각할 수있는 가장 짧은 작업 방법이지만 (아마도 가장 짧지는 않은 . 따라서, 골프 제안은 크게 감사합니다.

어쨌든,이 2 개 개의 부동 소수점 값을 반환 E_b하고 E_a각각.

온라인으로 사용해보십시오!


실패9999, 1
Metoniem

@Metoniem Yup. C 라운드가 플로팅하는 방법과 관련이 있습니다. : / 나는 그것을 조사하고있다.
R. Kap

실제로 올바른 것으로 보입니다. 테스트 사례가 유효하지 않을 수 있습니다. (
Metoniem

1

자바 스크립트 (ES7), 41 35 바이트

@Neil 덕분에 6 바이트 절약

a=>b=>[b=1/(1+10**((b-a)/400)),1-b]

Ea + Eb = 1이므로을 쓰십시오 a=>b=>[b=1/(1+10**((b-a)/400)),1-b].
Neil

@ 닐 정말? 너무 근시안입니다. : P 감사합니다!
ETHproductions

0

SAS 매크로 언어, 70 바이트

%macro e(a,b);data t;p=1/(1+10**((&b-&a)/400));q=1-p;proc print%mend;

출력 변수에 SAS 데이터 세트입니다 pq경력의 선수 '기회입니다. print절차 를 제거하여 11 바이트를 저장할 수 있습니다 .


0

C #, 92 바이트

최단은 아니지만 C #이며 최단은 아닙니다.

골프

   static double[]f(int a,double b){b=1/(1+System.Math.Pow(10,(a-b)/400d));return new[]{1-b,b};

언 골프

static double[] f(int a, double b)
{
    b = 1/(1 + System.Math.Pow(10, (a - b)/400d));
    return new[] {1 - b, b};
}

0

q, 26 바이트

{1%1+10 xexp(y-x;x-y)%400}

q){1%1+10 xexp(y-x;x-y)%400}[1200;2100]
0.0055919673088347735 0.99440803269116518
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.