XKCD Parantez Olasılıkları


13

Bugünün XKCD'si , yarışmacıların iyi bilinen isimler olduğu, muhtemelen kafa karıştırıcı isimlerden oluşan bir spor turnuvası tarzı parantezidir.

Belirli bir turdaki her yarışmacıya dayanarak, belirli bir yarışmacının tüm turnuvayı kazanma olasılığını verin.

Giriş

Bir yarışmacının adı.

  • XKCD tüm büyük harfleri kullanmayı sever, ancak sizin için anlamlı olan her şeyi kullanabilir veya giriş durumunuzu duyarsız hale getirebilirsiniz.
  • Tüm giriş adlarının geçerli olduğunu varsayabilirsiniz.
  • Jeff Gordanmuhtemelen bir yazım hatasıdır Jeff Gordon. Bunlardan birini veya her ikisini kabul etmeyi seçebilirsiniz.
  • Bazı isimler noktalama işaretlerini içerir, örn. H. G. WellsVe Joseph Gordon-Levitt. Noktalama işaretli (veya her ikisinde) olan veya olmayan adları kabul etmeyi seçebilirsiniz. Yukarıdaki noktalama işaretleri olmadan H G WellsveJoseph Gordon Levitt
  • Benzer şekilde, kabul edebilirsiniz ya Beyoncéya Beyonceya da her ikisi
  • Mister/Fred Astaire/RogersÇizgi biraz garip. Bu Biri için, aşağıdakilerden hepsini kabul gerekir: Fred Rogers, Mister RogersveFred Astaire

Çıktı

Verilen yarışmacının tüm turnuvayı rasyonel formda kazanma olasılığı (ör. 1/64)

Örnekler

  • Louis Armstrong potansiyel olarak 6 yarışta oynayacak, her biri iki yarışmacıya sahip olacak, bu yüzden 1/64 kazanma şansı var.
  • Alan Rickman potansiyel olarak 7 turda oynayacak, birincisi 3 yarışmacı ve geri kalanı 2 yarışmacı ile oynayacak, bu yüzden 1/192 kazanma şansı var.

Görüntüdeki tüm isimleri yazma zahmetinden tasarruf etmek için, açıklarXKCD zaten tablolanmış . Ben de onları bu çöp kutusuna attım .

AçıklamakXKCD'deki kazanma olasılıklarının yanlış olduğuna dikkat edin - olması gerekenden iki kat daha büyüktürler çünkü muhtemelen son turu unutuyorlar. @Geobits'i işaret ettiğiniz için teşekkür ederiz.


bu yüzden önce görüntüyü metne, sonra da sabit kod olasılık kovalarına dönüştürmeliyiz .. ughh
Optimizer

2
@Optimizer explaxkcd bu konuda size yardımcı olabilir
Martin Ender

@ MartinBüttner Bu uyuşturucu
Optimizer

@Optimizer görüntü dönüşümü gerekmez :)
Dijital Travma

4
explaxkcd bir wiki'dir; Neden herkes için düzeltebildiğinizde spesifikasyondaki bir notla düzeltmelisiniz? : P
yeraltı

Yanıtlar:


6

CJam, 161 bayt

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

Bu, büyük harf girişini bekleyen, noktalama işaretiyle ve tam olarak macunta gösterildiği gibi vurgular içeren tam bir programdır.

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

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.

Ben olasılıkları explaxkcd'den (2 ile çarpılmış) aldım ve boşlukları doldurdum. Umarım her şey doğrudur. Herhangi bir olasılığın düzeltilmesinin bayt sayısı üzerinde bir etkisi olmamalıdır.
Dennis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.