Probabilità della staffa XKCD


13

L'odierna XKCD è una parentesi nello stile di un torneo sportivo, in cui i concorrenti sono nomi noti, messi in gruppi di nomi probabilmente confusi.

Dare la probabilità che un determinato concorrente vincerà l'intero torneo, in base a ciascun concorrente in un dato round che ha le stesse possibilità di vincere quel round.

Ingresso

Il nome di un concorrente.

  • Ad XKCD piace usare tutte le lettere maiuscole, ma puoi usare qualunque caso abbia senso per te o rendere insensibile il tuo caso di input.
  • Si può presumere che tutti i nomi di input siano validi.
  • Jeff Gordanè probabilmente un errore di ortografia di Jeff Gordon. Puoi scegliere di accettare uno o entrambi.
  • Alcuni nomi includono la punteggiatura, ad esempio, H. G. Wellse Joseph Gordon-Levitt. Puoi scegliere di accettare nomi con o senza punteggiatura (o entrambi). Quanto sopra senza punteggiatura sarebbe H G WellseJoseph Gordon Levitt
  • Allo stesso modo, si può scegliere di accettare sia Beyoncéo Beyonceo entrambi
  • La Mister/Fred Astaire/Rogerslinea è un po 'strana. Per questo, è necessario accettare tutti i seguenti: Fred Rogers, Mister RogerseFred Astaire

Produzione

La probabilità che un determinato concorrente vinca l'intero torneo, in forma razionale (ad es. 1/64)

Esempi

  • Louis Armstrong giocherà potenzialmente in 6 round, ciascuno con due concorrenti, quindi ha una possibilità di vincere 1/64.
  • Alan Rickman giocherà potenzialmente in 7 round, il primo con 3 concorrenti e il resto con 2 concorrenti, quindi ha una probabilità 1/192 di vincere.

Per risparmiare lo sforzo di digitare tutti i nomi dall'immagine, spiega che XKCD li ha già tabulati . Li ho anche scaricati su questo pastebin .

Nota che le probabilità di vincita in esplicativo XKCD sono sbagliate: sono due volte più grandi di quanto dovrebbero essere perché presumibilmente stanno dimenticando il round finale. Grazie per averlo segnalato @Geobits.


quindi dobbiamo prima convertire l'immagine in testo e poi i bucket di probabilità hardcode .. ughh
Ottimizzatore

2
@Optimizer spiegatoxkcd può aiutarti in questo
Martin Ender,

@ MartinBüttner Quello è stupido
Ottimizzatore

@Optimizer nessuna conversione di immagine richiesta :)
Digital Trauma,

4
spiegatoxkcd è un wiki; perché correggerlo con una nota nelle specifiche quando è possibile risolverlo per tutti? : P
undergroundmonorail,

Risposte:


6

CJam, 161 byte

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

Questo è un programma completo che prevede input maiuscoli, con punteggiatura e accenti esattamente come mostrato nel file di traccia.

Provalo online nell'interprete CJam .

Come funziona

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.

Ho preso le probabilità da spiegatoxkcd (moltiplicato per 2) e colmato le lacune. Speriamo che sia tutto corretto. Risolvere eventuali probabilità non dovrebbe avere un impatto sul conteggio dei byte.
Dennis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.