Quizás algunos de ustedes ya conozcan este juego: tienen una colección de gomitas de diferentes colores. Para cada color, el frijol puede tener gustos diferentes, algunos son buenos y otros son malos, y no puede distinguirlos. Tienes que elegir un grano de un color dado y rezar para que selecciones uno bueno.
Por lo tanto, escriba el programa más corto que reciba un color de su elección (de una lista dada) y devuelva aleatoriamente el sabor seleccionado. El sabor tiene que ser elegido de una lista incorporada. La posible lista de entradas y salidas son:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Reglas:
- Puede suponer que la entrada siempre será un color de las opciones de entrada.
- Las mayúsculas y minúsculas y / o las líneas nuevas no importan.
- La producción debe ser uniformemente aleatoria: las ejecuciones de programas sucesivas deben producir resultados diferentes, y las posibilidades de obtener un sabor determinado deben ser las mismas para todos los gustos en una lista.
Este es el código de golf , ¡así que gane el programa más corto!
code-golf
random
game
compression
Charlie
fuente
fuente
blueberry
noblue berry
.Respuestas:
C #,
418313305271 bytesDemasiado tiempo incluso para C #, pero no puedo ver cómo hacerlo más corto.
Versión completa / formateada:
fuente
05AB1E , 126 bytes
Explicación:
Si alguien se pregunta, aquí está la cadena sin comprimir:
Sin embargo, probablemente pueda comprimirlo más usando algunos trucos inteligentes y el diccionario.
Pruébalo en línea!
fuente
"eougwt"
al.•4Õ!Õ•
de -1.eougwt
y.•4Õ!Õ•
, en lugar de"eougwt"
y.•4Õ!Õ•
. UpsJavaScript (ES6), 235 bytes
¡Necesito descubrir cómo comprimir cadenas en JS!
Si eso no es "lo suficientemente aleatorio" para sus gustos, agregue 7 bytes reemplazando
new Date
porMath.random()
.Intentalo
fuente
eluaoi
, lo pensé por mí mismo y pensé: "Oooh, mira lo inteligente que soy", ¡entonces te vi ganar!new Date%a.length
no es "uniformemente al azar".eluaoi
al mismo tiempo: PMath.random
lugar.Gelatina ,
101100 bytesPruébalo en línea!
fuente
Japt ,
148146 bytesPruébalo en línea!
Guardado 6 bytes gracias a Shaggy y ETHproductions
fuente
R
lugar de0
guardar un byte. Además, es posible que pueda comprimireluaoi
jugando con el orden.qR
cuál es la misma longitud?®
.eaiou
como cadena, puede comprimirlo a tres bytes (puede haber otras combinaciones de tres bytes).Python 2 ,
301258 bytesPruébalo en línea!
Ahorró muchos bytes al acortar las teclas para usar el segundo índice de la entrada, como lo sugiere @TheLethalCoder, y al dividir en comas en lugar de usar una lista directa.
fuente
eluaoi
como las teclas del diccionario y acceder a él con el índice 2 de la cadena debería ahorrarle bytes.Jalea ,
9594 bytesUn enlace monádico que acepta una lista de caracteres (en minúsculas) y devuelve una lista de caracteres.
Pruébalo en línea! o comer un paquete de 48 .
¿Cómo?
Ochenta y nueve de los noventa y cuatro bytes son una lista comprimida de ocho cadenas. Dos de estos son cadenas vacías y los otros seis son sabores separados por nueva línea para uno de los colores:
El resto del programa analiza la entrada para decidir qué lista usar, divide la lista elegida por nuevas líneas y elige un elemento aleatorio:
fuente
Java, 288 bytes
¡Pruébalo tú mismo!
Se puede jugar golf usando a
char[]
.Sin embargo, la parte aleatoria no se puede "distribuir uniformemente" sin el uso explícito de
Random.nextInt(int)
. Incluso(int)(Math.random()*a.length)
no está distribuido uniformemente.fuente
new java.util.Random().nextInt(a.length)
lugar de(int)(Math.random()*a.length)
...Math.random()
proporciona un número que tiene algunas especificidades (una potencia de0
y un signo de0
y 52 bits aleatorios). Entonces, en realidad usa una entropía de 52 sin ninguna otra verificación. Si la longitud es3
, por ejemplo,2^52
no es divisible por 3. Por lo tanto, no se distribuye al azar. Esta es la razón por la cualRandom.nextInt(int)
(el archivo java real, no javadoc, en la línea 394) tiene un mecanismo de bucle para asegurarse de que el número esté entre los números justos. A menos que me digan "es lo suficientemente bueno", soloRandom.nextInt(n)
es justo.Math.random()
¿no se puede usar cuando2^53
no se puede dividir equitativamente por el número con el que se multiplica? Entonces, si desea un número aleatorio del 0-3,(int)(Math.random()*4)
es aceptable dividirlo equitativamente (cuatro veces2251799813685248
), pero cuando lo usa,*3
no lo es (que es tres veces3002399751580330.666...
), ya que lanzarlo al piso interior lo hace algunas partes 1 más pequeño que otros. Y dado que la longitud es variable en su caso, tampoco está distribuida uniformemente (con la posibilidad de ser longitud 3).Math.random()
, si alguien dice algo "uniforme" o "bastante" aleatorio, usejava.util.Random
. Por eso también me quejé de la respuesta de Shaggy.> <> , 311 bytes
Pruébelo en línea o mírelo en el área de juegos para peces
¡Con SK cosidos acogedores y Doof God Dennac!
Explicación: La primera tarea del pez es descubrir cuál es la palabra de entrada zigzagueando por el lado izquierdo. El pez solo puede leer una letra a la vez, y se necesitan menos bytes para hacerlo de forma destructiva. Primero, el pez lee la primera letra y le pregunta si es así,
"y"
si es así, la palabra es "amarilla", de lo contrario continúa. Luego lee la segunda letra: si es así"l"
, la palabra es "azul"; de lo contrario, continúa; y así. Si se lee cinco letras y no coinciden"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) o"n"
(Gree N ), respectivamente, a continuación, el color debe haber sido "blanco".Luego viene el bit aleatorio. Para los colores con dos salidas posibles, esto es bastante sencillo: para el amarillo, por ejemplo, el pez ingresa el siguiente código en
x
:Los
x
conjuntos de la dirección al azar: si está arriba o izquierda, los remolinos de peces alrededor de los espejos atrás a lax
, pero si es derecha o hacia abajo, se lee "huevos podridos" o "palomitas de maíz con mantequilla" (a la inversa).Las divisiones de cuatro vías (para el blanco y el verde) son más desordenadas, pero siguen el mismo principio general: el primero es:
Tenga en cuenta que si el pez nada hacia arriba desde el primero
x
, pasa a través de ocho"
s, que activa y desactiva el modo de cuerda cuatro veces, luego golpea un espejo y nada hacia abajo.Para llegar a la última de cuatro vías de división, el pescado tiene que nadar a través de la
e
yr
de la "cal" y "pera", que se sumane = 14
a la pila (y revertirla), por lo que primero tenemos que eliminar eso con~
. Una de las cuatro ramas también implica nadar a través de una cadena de basura"> "
, que eliminamos con~~
.Finalmente, después de agregar uno de los sabores de frijoles a la pila, el pescado alcanza el flujo de
v
s en la columna más a la izquierda, que lo envía aque imprime caracteres (usando uno de los
o
s en "coco") hasta que no quede ninguno.fuente
T-SQL,
432 423 375 367 336295 bytes¡Finalmente, una operación basada en conjuntos!
(Los saltos de línea son para mostrar y no se cuentan en total).
La entrada se realiza a través de la columna c en la tabla con nombre t , según nuestras pautas .
Simplemente estoy uniendo nuestra tabla de entrada a una tabla llena de combinaciones válidas de color / sabor, luego seleccionando una fila aleatoria.
ORDER BY NEWID()
es una forma común de aleatorizar el orden de clasificación en SQL . Dependiendo de cuán estricto sea usted, es posible que no lo considere perfectamente uniforme al azar, pero debería ser lo suficientemente aleatorio para la selección de gominolas.EDITAR 1: guardado 9 bytes usando solo el tercer carácter del color, inspirado en otras respuestas.
EDIT 2: se guardaron 48 bytes poniendo la bandera de color y el sabor en una sola columna. Muchos personajes guardados en el INSERT.
EDITAR 3: guardado 8 bytes reemplazando
INSERT INTO b(o)
conINSERT b
EDIT 4: ahorró 31 bytes más uniéndose directamente a la tabla virtual de
VALUES
y, por lo tanto, eliminando elCREATE TABLE
yINSERT
.EDITAR 5: Ahorre 41 bytes actualizando a la
STRING_SPLIT
función solo SQL 2016 , lo que me permite eliminar la ejecución variable y dinámica de SQL.fuente
PHP , 242 bytes
Pruébalo en línea!
fuente
Mathematica, 247 bytes
Formulario de entrada
fuente
eluaoi
truco? No sé matemática, así que solo es una idea.Clojure, 231 bytes
La misma idea que las demás, puedo ahorrar algo de espacio en comparación con otros idiomas. Comprimir cadenas parece una causa perdida.
fuente