XKCD 브래킷 확률


13

오늘날의 XKCD 는 스포츠 토너먼트 스타일의 괄호로, 참가자들은 잘 알려진 이름이며, 혼란스러운 이름 그룹으로 분류됩니다.

주어진 라운드에서 각 참가자가 해당 라운드에서 이길 확률이 동일한 경우, 주어진 참가자가 전체 토너먼트에서 이길 확률을 제공합니다.

입력

참가자의 이름입니다.

  • XKCD는 모두 대문자를 사용하는 것을 좋아하지만, 대소 문자를 구분하지 않거나 대소 문자를 구분하지 않아도됩니다.
  • 모든 입력 이름이 유효하다고 가정 할 수 있습니다.
  • Jeff Gordan의 맞춤법 오류 일 수 Jeff Gordon있습니다. 이들 중 하나 또는 둘 다를 수락하도록 선택할 수 있습니다.
  • 일부 이름에는 문장 부호가 포함됩니다 (예 : H. G. Wells및) Joseph Gordon-Levitt. 문장 부호가 있거나없는 이름 (또는 둘 다)을 수락하도록 선택할 수 있습니다. 구두점없이 위가 될 H G WellsJoseph Gordon Levitt
  • 마찬가지로, 수락하도록 선택할 수 있습니다 중 하나 Beyoncé또는 Beyonce또는 둘 다
  • Mister/Fred Astaire/Rogers라인은 홀수 비트이다. 이 일을 위해, 당신은 다음을 모두 수용해야합니다 Fred Rogers, Mister Rogers그리고Fred Astaire

산출

합리적인 형태의 토너먼트 전을 승리 지정된 참가자의 확률 (예 1/64)

  • 루이 암스트롱은 잠재적으로 각각 2 명의 참가자가있는 6 라운드에서 플레이 할 것이므로 1/64 확률로 승리합니다.
  • Alan Rickman은 잠재적으로 7 라운드, 첫 번째 참가자는 3 명, 나머지는 2 명의 참가자로 진행되므로 1/192의 승리 확률이 있습니다.

이미지에서 모든 이름을 입력하는 수고를 덜기 위해 ExplainXKCD에는 이미 이름 이 표로 표시되어 있습니다. 또한 이 pastebin에 덤프했습니다 .

ExplainXKCD의 우승 확률은 잘못되었습니다. 최종 라운드를 잊었을 가능성이 있기 때문에 예상보다 두 배 더 큽니다. @Geobits를 지적 해 주셔서 감사합니다.


먼저 이미지를 텍스트로 변환 한 다음 확률 버킷을 하드 코딩해야합니다. ughh
Optimizer

2
@Optimizer describexkcd 가 도움을 줄 수 있습니다
Martin Ender

@ MartinBüttner 그게 마약 중독자
최적화 프로그램

@Optimizer 이미지 변환이 필요하지 않습니다 :)
Digital Trauma

4
describexkcd는 위키입니다. 모든 사람이 고칠 수있을 때 사양에 메모로 고쳐야하는 이유는 무엇입니까? : P
undergroundmonorail

답변:


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.