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)

예

  • 루이 암스트롱은 잠재적으로 각각 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.