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.

Trauma Digital
sumber
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.
Dennis
sumber
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