Probabilidades del soporte XKCD

13

El XKCD de hoy es un grupo de estilo de torneo deportivo, donde los concursantes son nombres conocidos, agrupados en nombres posiblemente confusos.

Proporcione la probabilidad de que un concursante determinado gane todo el torneo, en función de que cada concursante en una ronda dada tenga las mismas posibilidades de ganar esa ronda.

Entrada

El nombre de un concursante.

  • A XKCD le gusta usar todas las mayúsculas, pero puede usar cualquier caso que tenga sentido para usted o hacer que su caso de entrada no sea sensible.
  • Puede suponer que todos los nombres de entrada son válidos.
  • Jeff Gordanes probablemente un error ortográfico de Jeff Gordon. Puede elegir aceptar uno o ambos.
  • Algunos nombres incluyen puntuación, por ejemplo, H. G. Wellsy Joseph Gordon-Levitt. Puede elegir aceptar nombres con o sin puntuación (o ambos). Lo anterior sin puntuación sería H G WellsyJoseph Gordon Levitt
  • Del mismo modo, usted puede optar por aceptar, ya sea Beyoncéo Beyonceo ambos
  • La Mister/Fred Astaire/Rogerslínea es un poco extraña. Para éste, tiene que aceptar todo lo siguiente: Fred Rogers, Mister RogersyFred Astaire

Salida

La probabilidad de que el concursante dado gane todo el torneo, en forma racional (por ejemplo 1/64)

Ejemplos

  • Louis Armstrong jugará potencialmente en 6 rondas, cada una con dos concursantes, por lo que tiene una probabilidad de 1/64 de ganar.
  • Alan Rickman jugará potencialmente en 7 rondas, la primera con 3 concursantes y el resto con 2 concursantes, por lo que tiene una probabilidad de 1/192 de ganar.

Para ahorrarle el esfuerzo de escribir todos los nombres de la imagen, explique que XKCD ya los tiene tabulados . También los he arrojado a este pastebin .

Tenga en cuenta que las probabilidades de ganar en el explicar XKCD son incorrectas: son dos veces más grandes de lo que deberían ser porque presumiblemente están olvidando la ronda final. Gracias por señalar esto @Geobits.

Trauma digital
fuente
así que primero tenemos que convertir la imagen en texto y luego en bloques de probabilidad de código duro ... ughh
Optimizer
2
@Optimizer explicarxkcd puede ayudarlo con eso
Martin Ender
@ MartinBüttner Eso es tonto
Optimizer
@Optimizer no requiere conversión de imagen :)
Digital Trauma
44
explicarxkcd es un wiki; ¿Por qué arreglarlo con una nota en la especificación cuando podrías arreglarlo para todos? : P
undergroundmonorail

Respuestas:

6

CJam, 161 bytes

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

Este es un programa completo que espera una entrada en mayúscula, con signos de puntuación y acentos exactamente como se muestra en el pastebin.

Pruébelo en línea en el intérprete de CJam .

Cómo funciona

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
fuente
Tomé las probabilidades de explicarxkcd (multiplicado por 2) y completé los huecos. Con suerte, todo es correcto. La fijación de cualquier probabilidad no debería tener un impacto en el recuento de bytes.
Dennis