Tugas Anda adalah untuk menghitung peluang yang diharapkan untuk menang untuk 2 pemain dalam beberapa permainan, masing-masing dengan ELO Rating mereka sendiri . Pemain A memiliki ELO R a dan pemain B memiliki ELO R b
Skor yang diharapkan untuk Pemain A (E a ) adalah: 1 / (1 + 10 (R b - R a ) / 400 ). Ada persamaan yang sama untuk Player B (E b ): 1 / (1 + 10 (R a - R b ) / 400 ).
Jika Anda ingin versi yang lebih mudah disalin: 1 / (1 + 10^((a-b) / 400))
E a + E b harus sama dengan 1.
Oleh karena itu, skor untuk pemain adalah peluang yang diharapkan untuk memenangkan pertandingan, dalam desimal.
Program / fungsi Anda harus mengambil 2 input, ELO Player A, dan ELO Player B, dan mencetak / mengembalikan peluang masing-masing untuk menang dalam format desimal. Output harus berjumlah satu, dan Anda harus akurat hingga setidaknya 5 tempat desimal ( 0.00000
). Setelah 5 tempat desimal, Anda mungkin memiliki angka yang tidak akurat, asalkan dua output masih menambahkan hingga satu.
Contoh:
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
Dalam kasus tes akhir, beberapa jawaban menggunakan eksponensial ilmiah untuk mewakili nilai. Ini tidak valid
Anda dapat melihat dalam test case 3 di sini yang 0.557312
tidak cukup akurat, karena 2
harus a 1
, tetapi ini baik-baik saja karena setelah lima tempat desimal dan output masih menambahkan hingga satu.
Ini adalah contoh dari output yang tidak valid:
9999 9998 -> 0.5014391117091516, 0.49856088829084844
Ini kelihatannya memenuhi persyaratan pada pandangan pertama, tetapi jumlahnya bertambah hingga 1.00000000000000004
dan oleh karena itu outputnya tidak valid.
Membuntuti nol dalam output baik-baik saja.
Anda dapat mengasumsikan ELO pemain akan selalu lebih besar dari 0, dan tidak ada yang akan memiliki ELO lebih tinggi dari 9999.
Format input dan output fleksibel, tetapi input dan output masih harus di base 10.
Karena ini adalah kode-golf , jawaban dengan jumlah byte terendah akan menang!
[9999, 998]
yang sepertinya gagal dijawab oleh sebagian besar jawaban.9999, 1
termasuk saya sendiri, jadi saya tidak dapat mempostingnya :-(Jawaban:
Jelly , 9 byte
Cobalah online! atau Lihat semua kasus uji.
Input adalah sebuah array
[Ra, Rb]
dan output adalah sebuah array[Ea, Eb]
.Penjelasan
sumber
Python 3,
5547 byte-8 byte berkat @math_junkie
sumber
1/(1+10**(x/400))for x in [b-a,a-b]
MATL, 11 byte
Mengambil input sebagai daftar dan menampilkan daftar.
sumber
CJam , 23 byte
Beberapa solusi 23 byte lainnya:
Cobalah online!
Penjelasan
sumber
9999, 1
:(0.1 + 0.2 = 0.30000000000000004
. Saya akan memeriksanyaC, 63 byte
Mendefinisikan makro parameterisasi (agak naif)
M
, pendekatan kerja terpendek yang dapat saya pikirkan tetapi mungkin masih bukan yang terpendek. Karenanya, setiap saran golf sangat dihargai.Bagaimanapun, ini mengembalikan 2 nilai floating point,
E_b
danE_a
, masing-masing.Cobalah online!
sumber
9999, 1
JavaScript (ES7),
4135 byteDisimpan 6 byte berkat @Neil
sumber
a=>b=>[b=1/(1+10**((b-a)/400)),1-b]
.SAS Macro Language, 70 byte
Output adalah kumpulan data SAS di mana variabel
p
danq
peluang pemain untuk menang. 11 byte dapat disimpan dengan menghapusprint
prosedur.sumber
C #, 92 byte
Bukan yang terpendek, tapi itu C #, tidak pernah yang terpendek ..
Golf
Tidak disatukan
sumber
q, 26 byte
Contoh
sumber