Cuando era niño, mi amigo tenía una bola mágica 8 a la que le hacíamos preguntas y veíamos cuál era el destino de esa pregunta.
Reto
Su desafío es escribir un programa (o función) que cuando se ejecuta (o se llama), genera (o devuelve) una respuesta aleatoria de las posibles respuestas a continuación. (Random ser: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Las posibles respuestas de Magic 8-ball son (sin distinción entre mayúsculas y minúsculas):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
Entrada
Sin entrada.
Salida
Una elección al azar desde arriba. El caso no importa.
Reglas
Las lagunas estándar no están permitidas.
Este es el código de golf , por lo que gana el código más corto en bytes para cada idioma.
code-golf
kolmogorov-complexity
random
Desarrollador en desarrollo
fuente
fuente
Signs point to yes
Respuestas:
SOGL V0.12 , 166 bytes
Pruébalo aquí!
\ o / cada palabra estaba en el diccionario SOGLs!
fuente
> <> , 438 bytes
Pruébalo en línea!
No es tan interesante, pero creo que es la primera respuesta donde la aleatoriedad no es uniforme. Puse todos los mensajes negativos como menos probable :)
Alguna explicación:
El puntero comienza a ir directamente a la primera línea.
x
cambia el puntero a una dirección cardinal aleatoria. Si sube o baja, simplemente encuentra un diferentex
. Si sale bien, rebota|
y golpea lo mismox
. Si se va hacia la izquierda, se envuelve y empuja el texto de esa línea a la pila. La mayoría de las líneas luego golpean la misma pista de las^
cuales cambia la dirección hacia arriba. Esto recorreo
la primera línea, que genera la pila hasta que esté vacía. El caso especial es laYep
línea, que tiene el bucle horizontal en su|o<
lugar.fuente
Python 2,
369368 bytesPython 3, 371 bytes
Anteriormente estaba usando el
hash
builtin to index (hash(id)%20
), que devuelve un valor aleatorio por inicio del intérprete de Python desde https://bugs.python.org/issue13703 . Sin embargo, no es aleatorio para la cadena vacía (siempre 0), por lo que debe usar algo más, ¡elid
incorporado!En una segunda mirada, podría usar
id
directamente, pero parece que siempre produce números pares. IIRC,id(object)
en CPython solo devuelve la ubicación de memoria deobject
, por lo que esto tiene sentido. Tal vez si usara Jython o IronPython, podría omitir la división entre 7. De todos modos,hash(id)
vsid(0)//7
es igual en Python 3, pero puede usar el/
operador para truncar la división de enteros en Python 2, guardando un byte.fuente
PowerShell , 354 bytes
Pruébalo en línea!
Ho-hum Toma todos los resultados, concatenados junto con
0
s, luego-split
s0
para crear una serie de cadenas. Pasa esa matriz a laGet-Random
que seleccionará aleatoriamente uno de ellos. Eso queda en la tubería y la salida es implícita.fuente
Python 2 , 385 bytes
-1 byte gracias a los ovs.
Pruébalo en línea!
fuente
Applescript, 391
Me encanta cómo las listas de AppleScript tienen un
some item
método:fuente
Bash + GNU utilidades, 230
La salida binaria de zopfli no está bien representada aquí; en su lugar, puede reconstruir el script a partir de datos codificados en base64:
Tenga en cuenta que, según lo permitido por la pregunta, los datos comprimidos se descomprimen en minúsculas. Esto hace que la compresión zopfli sea un poco más eficiente y ahorra 16 bytes.
fuente
tail +2
no funciona para mí, perosed 1d $0
guarda un byte de todos modos. Además, dado que la salida a STDERR está permitida por defecto, no creo que necesite elexit
. Además, los últimos diez bytes del programa se pueden eliminar.R , 360 bytes
Pruébalo en línea!
No es exactamente la solución más elegante. R tiene una característica ordenada donde
stdin
se redirigirá al archivo fuente, por lo que puede colocar conjuntos de datos (pequeños) en el código fuente, guardar bytes para la división de cadenas o peor, construir el vector en sí (todas esas citas se suman a toda prisa). Junto con las incorporaciones para el muestreo aleatorio, esto da una respuesta breve.fuente
Carbón ,
203184 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 19 bytes en minúscula todo. Explicación:
fuente
Retina ,
333331321 bytesPruébalo en línea! Editar: guardado 1 byte al comprimir
doubt
y 1 byte en minúsculas todo para que pueda comprimirreply
. Luego guardé 10 bytes usando el golfista Retina Kolmogorov de @ Leo en el texto en minúsculas (que casualmente es el número de bytes que guardó en mi respuesta de 333 bytes).fuente
Coco , 380 bytes
Puerto de coco de la respuesta totalmente humana
Pruébalo en línea!
fuente
T-SQL, 393 bytes
La función
STRING_SPLIT
solo está disponible en SQL 2016 y versiones posteriores.Lo mejor que pude obtener para versiones anteriores usando
VALUES('It is certain'),('It is decidedly so'),...
fue 464 caracteres.Formateado, para que pueda ver la parte de trabajo:
NEWID()
genera un nuevo GUID pseudoaleatorio, por lo que es una forma de hacer una ordenación pseudoaleatoria.fuente
Jalea , 201 bytes
-2 bytes gracias al Sr. Xcoder. -1 byte gracias al usuario202729.
Pruébalo en línea!
Maldición , la compresión de SOGL es buena.
fuente
ỴX
al final del código para que elija al azar de uno de ellos)05AB1E , 171 bytes
Pruébalo en línea!
Explicación
“ ... “
empuja una cadena de todas las palabras requeridas.Algunas palabras se toman directamente del diccionario 05ab1e.
Algunos están escritos en ascii simple (como
haze
).Algunos son diccionario y ascii combinados (como
do
+n't
).Entonces el código de procesamiento es:
fuente
,
y'
agregado.ye
,don
yha
), y -2 de la clasificación de la lista de recuento de palabras y el uso de la compresión delta.Rubí,
362361 bytesPruébalo en línea!
fuente
?.
lugar de'.'
.?
literal de cadena de caracteres únicoPython 3, 386 bytes
fuente
Perl, 366
fuente
As I see it, yes
.split
.print
y guardar 1 byte más. Simplemente ponga un signo más unario antes de la lista:print((0..9)[5])
se convertiríaprint+(0..9)[5]
.05AB1E ,
208217 bytesPruébalo en línea!
Solución bastante básica. Las posibles respuestas se concatenan con el carácter x (ya que no está presente en las respuestas) y luego se comprimen (dentro de • ), 'x¡Ω se divide en x y aparece una opción aleatoria.
Gracias a @Emigna por señalar que a la compresión del alfabeto no le gusta 'o mucho'. Se solucionó rodeando la cadena comprimida con don ' y , sí .
fuente
,
y'
con espacios, por lo que la salida de esas 2 líneas es incorrecta.PHP ,
412385337384 bytesPruébalo en línea!
Solución bastante sencilla. Divida la cadena por un delimitador (en este caso
1
) y elija un elemento aleatorio de la matriz.fuente
php
para que su código se compile; 2, puede reemplazar'|'
con1
y todo|
con1
-2 bytes; 3 debe considerar cambiar su enlace para Probarlo en línea a TIO.run como lo prefiere la comunidad.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. No estoy seguro si en versiones anteriores eso importa o no. De cualquier manera, he editado la pregunta.<?=
y hacer eco de la explosión directamente usando en[rand(0, 19)]
lugar de agregar primero a una variable<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 bytes
-10 bytes gracias a Shaggy
Pruébalo en línea!
fuente
OR
en lugar deMath.floor()
ahorrar 7 bytes:Math.random()*20|0
.Befunge
1221870 bytes (el perímetro de todo el campo es de33x3630 * 29 caracteres) Gracias a Jo King por ayudarme a eliminar los nulos finales e instarme a cambiar el aleatorizador.La línea superior coloca el carácter '<' y la posición x (28) donde debería ir en la pila. Luego ingresamos el tipo de generador de números aleatorios. Esto podría mejorarse, pero esto es lo que podría entregar a corto plazo ... El número "aleatorio" se compensa para obtener la línea "aleatoria" real para leer.
Después de que se genera el número aleatorio, colocamos el carácter '<' en esa línea y empujamos las letras en la pila y en la línea inferior las imprimimos nuevamente.
Nota; si usa el intérprete al que he vinculado en el título de esta publicación, debe volver a hacer clic en "Mostrar" después de cada ejecución, porque la adición del carácter '<' permanece después de la ejecución.
fuente
>:#,_@
para evitar imprimir bytes nulos. Ah, y agregue un enlace TIO.Java 8 ,
433,392,380, 379 bytesPruébalo en línea!
fuente
String#split
. Además, puede guardar 11 bytes adicionales usando en(int)(Math.random()*20)
lugar denew java.util.Random().nextInt(20)
. Y el punto y coma no se cuenta para el conteo de bytes para lambdas. Entonces en total: 380 bytes .Don't
lugar deDon' t
.Rojo , 367 bytes
Pruébalo en línea!
No parece realmente aleatorio en TIO (aunque funciona bien en la consola roja), es por eso que agregué un azar / semilla al encabezado.
fuente
Excel, 399 bytes
Como
CHOOSE(X.Y,<>)
es lo mismoCHOOSE(X,<>)
, no es necesario unINT
No hay mucho golf que puedas hacer aquí ...
fuente
Aceto , 345 + 1 = 346 bytes (+1 para
-l
bandera)Pruébalo en línea!
No es demasiado interesante, pero no puedo pensar en nada más corto en este lenguaje, sin cadenas comprimidas ni nada.
fuente
C - 426 bytes
Utiliza una variable no inicializada mod 20 para indexar en una matriz de cadenas que contiene todas las salidas posibles. Los compiladores se quejan de que stdio.h no está incluido, pero funciona bien. Probablemente porque resulta que tiene la biblioteca estándar vinculada de todos modos. Suerte la mía.
fuente
Ir, 530 bytes
Tenga en cuenta que, en Go Playground, debido a cómo funciona la siembra, siempre da el mismo resultado. Cuando se ejecuta en una computadora normal, todo funciona como debería.
Creo que es posible ahorrar un poco más, pero mi conocimiento en Go se detiene allí :)
Versión formateada y comprobable
fuente
Excel-VBA,
362341339 BytesDonde
A1:T1
contienen las diferentes opciones. Lee toda la primera fila de la hoja en una matrizv
e indexa un punto aleatorio a lo largo de los primeros 19 valores.Sorprendido al descubrir que indexar una matriz no requiere valores enteros
fuente
VBA, 358 bytes
Una función de ventana inmediata anónima VBE que no toma entradas y salidas a STDOUT.
fuente
Java 8, 379 bytes
Pruébalo en línea
fuente