Peluang Braket XKCD


13

Today's XKCD adalah braket gaya turnamen-olahraga, di mana para kontestan adalah nama-nama terkenal, dimasukkan ke dalam kelompok-kelompok yang mungkin membingungkan.

Berikan probabilitas bahwa kontestan tertentu akan memenangkan seluruh turnamen, berdasarkan pada masing-masing kontestan dalam babak tertentu memiliki peluang yang sama untuk memenangkan babak itu.

Memasukkan

Nama kontestan.

  • XKCD suka menggunakan semua huruf besar, tetapi Anda dapat menggunakan huruf apa pun yang masuk akal untuk Anda atau membuat huruf besar-kecil yang Anda masukkan tidak sensitif.
  • Anda dapat menganggap semua nama input valid.
  • Jeff Gordanmungkin salah mengeja Jeff Gordon. Anda dapat memilih untuk menerima salah satu atau keduanya.
  • Beberapa nama termasuk tanda baca, misalnya H. G. Wellsdan Joseph Gordon-Levitt. Anda dapat memilih untuk menerima nama dengan atau tanpa tanda baca (atau keduanya). Di atas tanpa tanda baca akan menjadi H G WellsdanJoseph Gordon Levitt
  • Demikian pula, Anda dapat memilih untuk menerima baik Beyoncéatau Beyonceatau keduanya
  • The Mister/Fred Astaire/Rogersline adalah agak aneh. Untuk yang satu ini, Anda harus menerima semua hal berikut: Fred Rogers, Mister RogersdanFred Astaire

Keluaran

Probabilitas kontestan yang diberikan memenangkan seluruh turnamen, dalam bentuk rasional (mis. 1/64)

Contohnya

  • Louis Armstrong akan berpotensi bermain dalam 6 putaran, masing-masing dengan dua kontestan, sehingga ia memiliki peluang 1/64 untuk menang.
  • Alan Rickman akan berpotensi bermain dalam 7 putaran, yang pertama dengan 3 kontestan dan sisanya dengan 2 kontestan, sehingga ia memiliki peluang 1/192 untuk menang.

Untuk menghemat upaya Anda mengetik semua nama dari gambar, jelaskan XKCD yang telah mereka tabulasikan . Saya juga telah membuangnya ke pastebin ini .

Perhatikan probabilitas menang dalam menjelaskan XKCD salah - mereka dua kali lebih besar dari seharusnya karena mereka mungkin melupakan babak final. Terima kasih telah menunjukkan ini @Geobits.


jadi pertama-tama kita harus mengkonversi gambar menjadi teks dan kemudian ember probabilitas hardcode .. ughh
— Pengoptimal

2
@Optimizer menjelaskanxkcd dapat membantu Anda dengan itu
— Martin Ender

@ MartinBüttner Itu obat bius
— Pengoptimal

@Optimizer tidak memerlukan konversi gambar :)
— Digital Trauma

4
menjelaskanxkcd adalah wiki; mengapa memperbaikinya dengan catatan di spec ketika Anda bisa memperbaikinya untuk semua orang? : P
— undergroundmonorail

Jawaban:


6

CJam, 161 byte

1'/l_"FRE"#\_'É#)\2b626%536%"òazíF­.?§·»ùßóÿ÷ýÿÿ»×ï_ÿÿ¿ß÷ä¿ûïÿÏÅÿ¿ÿÿ~ÿþÿýó½ïÿþþ/ïþÿ®þü¾ùÿ®÷/"256b2b2*<1-,"ãÍÕý*ÔÞ)ð^sV? Ìöî²\ÅlÕáS{Á"260b5b=5,Z6t=2+1\?4?32*

Ini adalah program lengkap yang mengharapkan input huruf besar, dengan tanda baca dan aksen persis seperti yang ditunjukkan pada pastebin.

Cobalah online di penerjemah CJam .

Bagaimana itu bekerja

1'/      e# Push a 1 and a slash.
l        e# Read a line of input from STDIN.
_"FRE"#  e# Push 0 if the input starts with "FRE" and a truthy value otherwise.
\_'É#)   e# Push 1 if the input doesn't contain "É" and a falsy value otherwise.

         e# Now we hash the input:
\2b      e#     Apply base 2 conversion to turn the input into an integer.
626%536% e#     Take that integer modulo 626, then modulo 536.

"òazíF­.?§·»ùßóÿ÷ýÿÿ»×ï_ÿÿ¿ß÷ä¿ûïÿÏÅÿ¿ÿÿ~ÿþÿýó½ïÿþþ/ïþÿ®þü¾ùÿ®÷/"256b2b2*

         e# Convert the string from base 256 to base 2 and repeat it.
         e# The resulting array, [1 1 1 1 0 0 1 0 0 ...], contains a 0 at index X
         e# if and only if there is a possible input with hash X.

<        e# Keep the binary values before the index of the input hash.
<1-,     e# Count the number of zeroes.

"ãÍÕý*ÔÞ)ð^sV?  Ìöî²\ÅlÕáS{Á"260b5b

         e# Convert the string from base 260 to base 5.
         e# The resulting array, [2 2 2 2 2 0 4 4 0 0 ...], contains a diffrent
         e# integer for every different probability. The input with the lowest hash
         e# corresponds to the first index, the one with the highest to the last.

=        e# Retrieve the integer corresponding to the input.
5,Z6t=   e# Retrieve the corresponding element from [0 1 2 6 4].
2+       e# Add two.
1\?      e# Select the result from above or 1 for BEYONCÉ.
4?       e# Select the result from above or 4 for and FRED.
32*      e# Multiply by 32.

Saya telah mengambil probabilitas dari explanxkcd (dikalikan dengan 2) dan mengisi kekosongan. Semoga semuanya benar. Memperbaiki probabilitas apa pun seharusnya tidak berdampak pada jumlah byte.
— Dennis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.