XKCD-Klammerwahrscheinlichkeiten

13

Das heutige XKCD ist eine Art Sportturnier, bei dem die Teilnehmer bekannte Namen sind, die in Gruppen von möglicherweise verwirrenden Namen eingeteilt sind.

Geben Sie die Wahrscheinlichkeit an, dass ein bestimmter Teilnehmer das gesamte Turnier gewinnt, wobei jeder Teilnehmer in einer bestimmten Runde die gleiche Chance hat, diese Runde zu gewinnen.

Eingang

Der Name eines Kandidaten.

  • XKCD verwendet gerne Großbuchstaben, Sie können jedoch auch die für Sie sinnvolle Groß- und Kleinschreibung verwenden oder die Groß- und Kleinschreibung Ihrer Eingaben aufheben.
  • Sie können davon ausgehen, dass alle Eingabenamen gültig sind.
  • Jeff Gordanist wahrscheinlich ein Rechtschreibfehler von Jeff Gordon. Sie können eines oder beide akzeptieren.
  • Einige Namen enthalten Interpunktion, z . B. H. G. Wellsund Joseph Gordon-Levitt. Sie können Namen mit oder ohne Interpunktion (oder mit beiden) akzeptieren. Das obige ohne Interpunktion wäre H G WellsundJoseph Gordon Levitt
  • In ähnlicher Weise können Sie entweder akzeptieren Beyoncéoder Beyonceoder beides
  • Die Mister/Fred Astaire/RogersLinie ist etwas seltsam. Für diese, müssen Sie alle folgenden akzeptieren: Fred Rogers, Mister RogersundFred Astaire

Ausgabe

Die Wahrscheinlichkeit, dass ein Kandidat das gesamte Turnier in rationaler Form gewinnt (z. B. 1/64)

Beispiele

  • Louis Armstrong wird möglicherweise in 6 Runden mit jeweils zwei Teilnehmern spielen, sodass er eine Gewinnchance von 1/64 hat.
  • Alan Rickman wird möglicherweise in 7 Runden spielen, die erste mit 3 Teilnehmern und die andere mit 2 Teilnehmern, sodass er eine Gewinnchance von 1/192 hat.

Damit Sie nicht alle Namen aus dem Bild eingeben müssen , sind sie in EXPLAINXKCD bereits tabellarisch aufgeführt . Ich habe sie auch in diesen Pastebin geworfen .

Beachten Sie, dass die Gewinnwahrscheinlichkeiten in der EXPLAINXKCD falsch sind - sie sind doppelt so groß wie sie sein sollten, weil sie vermutlich die letzte Runde vergessen. Vielen Dank für den Hinweis auf @Geobits.

Digitales Trauma
quelle
Also müssen wir zuerst das Bild in Text konvertieren und dann die Wahrscheinlichkeitsbereiche fest codieren. ughh
Optimizer
2
@Optimizer EXPLAINXKCD kann Ihnen dabei helfen
Martin Ender
@ MartinBüttner Das ist Dope
Optimizer
@Optimizer keine Bildkonvertierung erforderlich :)
Digital Trauma
4
EXPLAINXKCD ist ein Wiki. Warum sollte man es mit einem Hinweis in der Spezifikation reparieren, wenn man es für alle reparieren konnte? : P
undergroundmonorail

Antworten:

6

CJam, 161 Bytes

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

Dies ist ein vollständiges Programm, das Großbuchstaben erwartet, mit Zeichensetzung und Akzenten genau wie im Pastebin.

Probieren Sie es online im CJam-Interpreter aus .

Wie es funktioniert

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
quelle
Ich habe die Wahrscheinlichkeiten aus EXPLAINXKCD (multipliziert mit 2) genommen und die Lücken gefüllt. Hoffentlich stimmt alles. Das Festlegen einer Wahrscheinlichkeit sollte sich nicht auf die Byteanzahl auswirken.
Dennis