Вероятности в скобках 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Линия является немного странным. Для этого, вы должны принять все из следующих условий : Fred Rogers, Mister RogersиFred Astaire

Выход

Вероятность того, что данный участник выиграет весь турнир в рациональной форме (например 1/64)

Примеры

  • Потенциально Луи Армстронг сыграет в 6 раундах, в каждом из которых по два участника, поэтому у него есть шанс выиграть 1/64.
  • Алан Рикман потенциально сыграет в 7 раундах, первый с 3 участниками, а остальные с 2 участниками, так что у него есть шанс выиграть 1/192.

Чтобы избавить вас от необходимости вводить все имена с изображения, объяснение XKCD уже содержит их в виде таблиц . Я также выбросил их в эту пастинку .

Обратите внимание, что вероятности выигрыша в объяснении XKCD неверны - они в два раза больше, чем должны быть, потому что они, вероятно, забывают последний раунд. Спасибо за указание на это @Geobits.

Цифровая травма
источник
таким образом, мы должны сначала преобразовать изображение в текст, а затем жестко закодировать вероятностные интервалы .. тьфу
Оптимизатор
2
@Optimizer объяснить xkcd может помочь вам в этом
Мартин Эндер
@ MartinBüttner Это допинг
Оптимизатор
@ Оптимизатор преобразования изображения не требуется :)
Digital Trauma
4
объяснение xkcd является вики; зачем исправлять это с пометкой в ​​спецификации, если это можно исправить для всех? : 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.
Деннис
источник
Я взял вероятности из объяснения xkcd (умноженного на 2) и заполнил пробелы. Надеюсь, все правильно. Исправление любой вероятности не должно влиять на количество байтов.
Деннис