Probabilités du support XKCD

13

Le XKCD d'aujourd'hui est un support de style tournoi sportif, où les concurrents sont des noms bien connus, regroupés en groupes de noms potentiellement déroutants.

Donnez la probabilité qu'un concurrent donné remporte le tournoi entier, sur la base du fait que chaque concurrent d'un tour donné a une chance égale de gagner ce tour.

Contribution

Le nom d'un candidat.

  • XKCD aime utiliser tous les majuscules, mais vous pouvez utiliser n'importe quel cas qui vous convient ou rendre votre casse insensible.
  • Vous pouvez supposer que tous les noms d'entrée sont valides.
  • Jeff Gordanest probablement une faute d'orthographe Jeff Gordon. Vous pouvez choisir d'accepter l'un ou les deux.
  • Certains noms incluent la ponctuation, par exemple H. G. Wellset Joseph Gordon-Levitt. Vous pouvez choisir d'accepter des noms avec ou sans ponctuation (ou les deux). Ce qui précède sans ponctuation serait H G WellsetJoseph Gordon Levitt
  • De même, vous pouvez choisir d'accepter l'un Beyoncéou l' autre Beyonceou les deux
  • La Mister/Fred Astaire/Rogersligne est un peu bizarre. Pour celui - ci, vous devez accepter toutes les caractéristiques suivantes: Fred Rogers, Mister RogersetFred Astaire

Production

La probabilité qu'un concurrent donné remporte le tournoi entier, sous une forme rationnelle (par exemple 1/64)

Exemples

  • Louis Armstrong jouera potentiellement en 6 tours, chacun avec deux concurrents, il a donc 1/64 de chance de gagner.
  • Alan Rickman jouera potentiellement en 7 tours, le premier avec 3 concurrents et le reste avec 2 concurrents, il a donc 1/192 chance de gagner.

Pour vous épargner l'effort de taper tous les noms de l'image, expliquerXKCD les a déjà tabulés . Je les ai également déposés dans cette boîte à pâte .

Notez que les probabilités de gagner dans l'expliquerXKCD sont fausses - elles sont deux fois plus grandes qu'elles devraient l'être car elles oublient probablement le tour final. Merci d'avoir signalé @Geobits.

Traumatisme numérique
la source
nous devons donc d'abord convertir l'image en texte, puis les tranches de probabilité de codage en dur .. ughh
Optimizer
2
@Optimizer expliquerxkcd peut vous aider avec ça
Martin Ender
@ MartinBüttner C'est dope
Optimizer
@Optimizer aucune conversion d'image requise :)
Digital Trauma
4
expliquerxkcd est un wiki; pourquoi le réparer avec une note dans la spécification alors que vous pouvez le réparer pour tout le monde? : P
métro

Réponses:

6

CJam, 161 octets

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

Il s'agit d'un programme complet qui attend une entrée en majuscules, avec ponctuation et accents exactement comme indiqué dans le pastebin.

Essayez-le en ligne dans l' interpréteur CJam .

Comment ça fonctionne

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.
Dennis
la source
J'ai pris les probabilités d'expliquerxkcd (multiplié par 2) et rempli les lacunes. Espérons que tout soit correct. La fixation d'une probabilité ne devrait pas avoir d'impact sur le nombre d'octets.
Dennis