Prawdopodobieństwa wspornika XKCD

13

Dzisiejszy XKCD jest wspornikiem w stylu turniejów sportowych, w którym zawodnicy są znanymi nazwiskami, podzielonymi na grupy o mylących nazwach.

Podaj prawdopodobieństwo, że dany zawodnik wygra cały turniej, w oparciu o to, czy każdy uczestnik w danej rundzie ma równe szanse na wygraną w tej rundzie.

Wejście

Imię zawodnika

  • XKCD lubi używać wielkich liter, ale możesz użyć dowolnej wielkości liter lub sprawić, że wielkość liter nie będzie uwzględniana.
  • Możesz założyć, że wszystkie nazwy wejściowe są prawidłowe.
  • Jeff Gordanjest prawdopodobnie błędna pisownia Jeff Gordon. Możesz zaakceptować jedno lub oba z nich.
  • Niektóre nazwy zawierają znaki interpunkcyjne, EG H. G. Wellsi Joseph Gordon-Levitt. Możesz zaakceptować nazwy z interpunkcją lub bez (lub obu). Powyższe bez interpunkcji byłoby H G WellsiJoseph Gordon Levitt
  • Podobnie, można wybrać, aby zaakceptować albo Beyoncéalbo Beyoncealbo obu
  • Mister/Fred Astaire/RogersLinia jest nieco dziwne. Na ten jeden, musisz zaakceptować wszystkie poniższe kryteria: Fred Rogers, Mister RogersiFred Astaire

Wynik

Prawdopodobieństwo, że dany zawodnik wygra cały turniej, w racjonalnej formie (np. 1/64)

Przykłady

  • Louis Armstrong potencjalnie zagra w 6 rundach, każda z dwoma zawodnikami, więc ma szansę na zwycięstwo w 1/64.
  • Alan Rickman potencjalnie zagra w 7 rundach, pierwsza z 3 uczestnikami, a reszta z 2 uczestnikami, więc ma on szansę na wygraną w 1/192.

Aby zaoszczędzić Ci czasu na wpisywaniu wszystkich nazwisk z obrazu, wyjaśnij , że XKCD już je zawiera . Zrzuciłem je również do tej pastebin .

Zwróć uwagę, że prawdopodobieństwo wygranej w wyjaśnieniu XKCD jest błędne - są dwa razy większe niż powinny, ponieważ prawdopodobnie zapominają ostatnią rundę. Dziękujemy za zwrócenie uwagi na @Geobits.

Cyfrowa trauma
źródło
więc najpierw musimy przekonwertować obraz na tekst, a następnie ustalić przedziały prawdopodobieństwa kodu twardego. ughh
Optimizer
2
@Optimizer Translatexkcd może ci w tym pomóc
Martin Ender
@ MartinBüttner That's dope
Optimizer
@Optimizer nie wymaga konwersji obrazu :)
Cyfrowa trauma
4
wyjaśnić to wiki; po co to naprawiać z notatką w specyfikacji, kiedy można to naprawić dla wszystkich? : P
metro

Odpowiedzi:

6

CJam, 161 bajtów

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

Jest to pełny program, który oczekuje wprowadzania wielkich liter, z interpunkcją i akcentami dokładnie tak, jak pokazano na pastebin.

Wypróbuj online w interpretatorze CJam .

Jak to działa

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
źródło
Wziąłem prawdopodobieństwa z wyjaśnienia xkcd (pomnożone przez 2) i wypełniłem luki. Mam nadzieję, że wszystko jest w porządku. Naprawienie jakiegokolwiek prawdopodobieństwa nie powinno mieć wpływu na liczbę bajtów.
Dennis