Sua tarefa é calcular a chance esperada de ganhar para 2 jogadores em algum jogo, cada um com sua própria classificação ELO . O jogador A tem ELO R a e o jogador B tem ELO R b
A pontuação esperada para o jogador A (E a ) é: 1 / (1 + 10 (R b - R a ) / 400 ). Há uma equação semelhante para o jogador B (E b ): 1 / (1 + 10 (R um - R b ) / 400 ).
Se você deseja uma versão mais copiável: 1 / (1 + 10^((a-b) / 400))
E a + E b deve ser igual a 1.
Portanto, a pontuação de um jogador é a chance esperada de ganhar alguma partida, em decimal.
Seu programa / função deve receber 2 entradas, ELO do Jogador A e ELO do Jogador B, e imprimir / retornar sua respectiva chance de ganhar no formato decimal. A saída deve somar uma e você precisa ter pelo menos 5 casas decimais ( 0.00000
). Depois de 5 casas decimais, você pode ter dígitos imprecisos, desde que as duas saídas ainda somam uma.
Exemplos:
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
No caso de teste final, algumas respostas usam exponenciação científica para representar o valor. Isto não é válido.
Você pode ver aqui no caso de teste 3 que 0.557312
não é muito preciso, porque 2
deveria ser um 1
, mas isso é bom porque ocorre depois de cinco casas decimais e as saídas ainda somam uma.
Este é um exemplo de saída inválida:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Parece que ele satisfaz os requisitos à primeira vista, mas os números somam 1.00000000000000004
e, portanto, a saída não é válida.
Os zeros à direita na saída estão corretos.
Você pode presumir que a ELO de um jogador sempre será maior que 0 e que ninguém terá uma ELO maior que 9999.
O formato de entrada e saída é flexível, mas a entrada e a saída ainda devem estar na base 10.
Como se trata de código-golfe , a resposta com a menor contagem de bytes vencerá!
[9999, 998]
qual a maioria das respostas parece falhar.9999, 1
incluindo o meu, então eu não posso postá-lo :-(Respostas:
Geléia , 9 bytes
Experimente online! ou Exibir todos os casos de teste.
A entrada é uma matriz
[Ra, Rb]
e a saída é uma matriz[Ea, Eb]
.Explicação
fonte
Python 3,
5547 bytes-8 bytes graças a @math_junkie
fonte
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 bytes
Pega entrada como uma lista e gera uma lista.
fonte
CJam , 23 bytes
Algumas outras soluções de 23 bytes:
Experimente online!
Explicação
fonte
9999, 1
:(0.1 + 0.2 = 0.30000000000000004
. Vou dar uma olhada nele #C, 63 bytes
Define uma macro parametrizada (bastante ingênua)
M
, a abordagem de trabalho mais curta que eu conseguia pensar, mas provavelmente ainda não a mais curta. Como tal, todas as sugestões de golfe são muito apreciadas.De qualquer forma, isso retorna 2 valores de ponto flutuante
E_b
eE_a
, respectivamente.Experimente online!
fonte
9999, 1
JavaScript (ES7),
4135 bytesGuardado 6 bytes graças a @Neil
fonte
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.Linguagem de Macro SAS, 70 bytes
Saída é um conjunto de dados SAS em que variáveis
p
eq
são as chances de vitória dos jogadores. 11 bytes podem ser salvos removendo oprint
procedimento.fonte
C #, 92 bytes
Não é o mais curto, mas é C #, nunca o mais curto ..
Golfe
Ungolfed
fonte
q, 26 bytes
Exemplo
fonte