XKCDブラケット確率


13

今日のXKCDはスポーツトーナメントスタイルのブラケットであり、競技者はよく知られた名前であり、混乱を招く可能性のある名前のグループに入れられます。

与えられたラウンドの各競技者がそのラウンドに勝つ可能性が等しいことに基づいて、与えられた競技者がトーナメント全体に勝つ確率を与えます。

入力

出場者の名前。

  • XKCDはすべて大文字を使用するのが好きですが、大文字と小文字を区別せずに使用することも、入力大文字と小文字を区別しないこともできます。
  • すべての入力名が有効であると想定できます。
  • Jeff GordanはおそらくスペルミスですJeff Gordon。これらのいずれかまたは両方を受け入れることを選択できます。
  • いくつかの名前は句読点、例えば含めるH. G. WellsとをJoseph Gordon-Levitt。句読点の有無にかかわらず(またはその両方)、名前を受け入れることを選択できます。句読点なし上記のようになりますH G Wellsし、Joseph Gordon Levitt
  • 同様に、どちらかBeyoncéBeyonceまたは両方を受け入れることを選択できます
  • Mister/Fred Astaire/Rogersラインが少し奇妙です。この1については、次のすべてを受け入れる必要がありますFred RogersMister RogersFred Astaire

出力

与えられた競技者がトーナメント全体に勝つ確率(合理的な形式)(例1/64

  • ルイアームストロングは、6ラウンドでそれぞれ2人の競技者と対戦する可能性があるため、1/64の勝率があります。
  • アランリックマンは潜在的に7ラウンドでプレイする可能性があります。1回目は3人の競技者で、残りは2人の競技者であるため、1/192の確率で勝ちます。

画像からすべての名前を入力する手間を省くために、explainXKCDはすでにそれらを表にしています。また、それらをこのペーストビンにダンプしました。

ExplainXKCDでの勝ちの確率は間違っていることに注意してください-おそらく最終ラウンドを忘れているため、本来の2倍の大きさです。@Geobitsを指摘してくれてありがとう。


そのため、最初に画像をテキストに変換してから、確率バケットをハードコードする必要があります.. ughh-
オプティマイザー

2
@ オプティマイザーのexplainxkcdはそれであなたを助けることができます
マーティン・エンダー

@MartinBüttnerそれはドープ
オプティマイザー

@Optimizer画像の変換は必要ありません:)
デジタルトラウマ

4
describexkcdはwikiです。すべての人のために修正できるのに、なぜ仕様のメモで修正するのですか?:P
地下

回答:


6

CJam、161バイト

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

これは、大文字の入力を想定した完全なプログラムであり、句読点とアクセントが正確にペーストビンに示されています。

CJamインタプリタでオンラインで試してください。

使い方

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.

私は、explainxkcd(2倍)から確率を取り、ギャップを埋めました。うまくいけば、すべてが正しい。確率を修正しても、バイトカウントに影響はありません。
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.