XKCD Bracket ความน่าจะเป็น


13

วันนี้ XKCDเป็นกีฬาสไตล์การแข่งขันที่ผู้เข้าแข่งขันเป็นชื่อที่รู้จักกันดีใส่ลงในกลุ่มของชื่อที่อาจเกิดความสับสน

ให้ความน่าจะเป็นที่ผู้เข้าแข่งขันที่ระบุจะชนะการแข่งขันทั้งหมดขึ้นอยู่กับผู้เข้าแข่งขันแต่ละคนในรอบที่กำหนดซึ่งมีโอกาสเท่ากันในการชนะรอบนั้น

อินพุต

ชื่อของผู้แข่งขัน

  • XKCD ชอบที่จะใช้ตัวพิมพ์ใหญ่ทั้งหมด แต่คุณสามารถใช้ตัวพิมพ์เล็กและตัวพิมพ์เล็กก็ได้
  • คุณอาจสันนิษฐานว่าชื่ออินพุตทั้งหมดนั้นถูกต้อง
  • Jeff GordanJeff 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
  • Alan Rickman มีแนวโน้มที่จะเล่นในรอบ 7 ซึ่งเป็นครั้งแรกกับ 3 ผู้เข้าแข่งขันและส่วนที่เหลือกับผู้เข้าแข่งขัน 2 คนดังนั้นเขาจึงมีโอกาสชนะ 1/192

ที่จะช่วยให้คุณประหยัดความพยายามในการพิมพ์ในชื่อทั้งหมดจากภาพexplainXKCD แล้วมีพวกเขาในตาราง ฉันได้ทิ้งไปยังpastebin นี้แล้ว

สังเกตความน่าจะเป็นที่ชนะในการอธิบาย XKCD นั้นผิด - มันใหญ่เป็นสองเท่าตามที่ควรจะเป็นเพราะน่าจะลืมรอบสุดท้ายได้ ขอบคุณที่ชี้ให้เห็น @Geobits


ดังนั้นเราต้องแปลงภาพให้เป็นข้อความก่อนจากนั้นจึงใส่ถังความน่าจะเป็น hardcode .. ughh
เครื่องมือเพิ่มประสิทธิภาพ

2
@Optimizer translatexkcdสามารถช่วยคุณได้
Martin Ender


@Optimizer ไม่ต้องการแปลงรูปภาพ :)
Digital Trauma

4
อธิบาย xkcd เป็นวิกิ; ทำไมแก้ไขด้วยหมายเหตุในสเปคเมื่อคุณสามารถแก้ไขได้สำหรับทุกคน? : P
undergroundmonorail

คำตอบ:


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.

ฉันได้ความน่าจะเป็นที่อธิบายจาก xxcd (คูณด้วย 2) และเติมลงในช่องว่าง หวังว่าทุกอย่างถูกต้อง การแก้ไขความน่าจะเป็นใด ๆ ไม่ควรมีผลกระทบกับจำนวนไบต์
Dennis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.