XKCD支架概率


13

今天的XKCD是一种运动比赛风格的支架,其中的参赛者都是众所周知的名字,分成几组可能令人困惑的名字。

根据给定回合中每个参赛者赢得该回合的机会均等,给出给定参赛者将赢得整个锦标赛的概率。

输入值

参赛者的名字。

  • XKCD喜欢使用所有大写字母,但是您可以使用任何对您有意义的大小写,也可以使您的输入不区分大小写。
  • 您可以假定所有输入名称均有效。
  • Jeff Gordan可能是的拼写错误Jeff Gordon。您可以选择接受其中一个或两个。
  • 一些名称包括标点符号,例如H. G. WellsJoseph Gordon-Levitt。您可以选择接受带或不带标点符号的名称(或同时包含两者)。上面没有标点的将是H G WellsJoseph Gordon Levitt
  • 同样,你可以选择接受或者BeyoncéBeyonce或两者
  • Mister/Fred Astaire/Rogers条线有点奇怪。对于这一个,你必须接受以下所有的:Fred RogersMister RogersFred Astaire

输出量

给定参赛者以合理形式赢得整个比赛的概率(例如1/64

例子

  • 路易斯·阿姆斯特朗(Louis Armstrong)可能会参加6轮比赛,每轮有两名选手,因此他有1/64的获胜机会。
  • 艾伦·里克曼(Alan Rickman)可能会参加7轮比赛,第一轮有3名选手参加,其余的有2名选手参加,因此他有1/192的获胜机会。

为了节省您键入图像中所有名称的工作量,explainXKCD已经将它们制成表格了。我也把它们丢到这个粘贴桶里

请注意,explainXKCD中的获胜概率是错误的-它们是应有值的两倍,因为它们大概忘记了最后一轮。感谢您指出@Geobits。


因此,我们必须首先将图像转换为文本,然后将概率桶进行硬编码.. ughh
Optimizer

2
@Optimizer说明xkcd可以帮助您解决问题
马丁·恩德

@MartinBüttner这就是涂料
优化器

@Optimizer无需图像转换:)
Digital Trauma

4
describexkcd是一个Wiki;当您可以为所有人修复时,为什么还要在规范中添加注释进行修复?:P
Undergroundmonorail

Answers:


6

CJam,161字节

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

这是一个完整的程序,希望输入大写字母,标点符号和重音符与pastebin中显示的完全相同。

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)并填补了空白。希望一切都正确。固定任何概率都不会影响字节数。
丹尼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.