¿Recuerdas el juego para niños, 'Pato, pato, ganso' ? ¿No? Yo tampoco.
El reto
- Imprima la palabra 'pato' en líneas individuales una cantidad indeterminada de veces.
- Imprime la palabra 'ganso'.
- Tu programa termina.
Las normas
- Intenta jugar el juego en la menor cantidad de bytes.
- Debe haber al menos un pato.
- Debe haber exactamente un ganso al final de la lista.
- Debe haber exactamente un pájaro en cada línea. No hay líneas vacías.
- El caso de las cadenas de salida es irrelevante.
- El espacio en blanco dentro de una línea está bien.
- Tu programa debe terminar.
- Su programa no debe producir constantemente la misma cantidad de patos.
¡Que te diviertas!
Tenga en cuenta: esta pregunta no es un duplicado del código más corto para producir una salida no determinista
Las razones incluyen:
- La asociación al juego de los niños.
- Los requisitos de inicio y finalización definidos de la cadena de resultados. No hay salida especificada en el otro desafío.
- Respuestas Para el otro, el desafío no duplicado está en un número de bytes de un solo dígito. El promedio para este es de alrededor de 30, o alrededor.
- Por la cantidad de superposición entre este desafío y aquel, cualquier pregunta de código de golf que incluya la etiqueta 'aleatoria' es un duplicado. ¿Deberíamos eliminarlos a todos?
- Las respuestas del código para este desafío coincidirían con el otro desafío (de una manera ridículamente hinchada), pero las respuestas a ese desafío no coincidirían con este.
Respuestas:
Jalea , 13 bytes
Pruébalo en línea!
Explicación:
Versión más legible: ¡ Pruébelo en línea!
Siempre devolverá 1 o 2 patos.
fuente
Lenguaje de script Operation Flashpoint , 48 bytes
Siempre imprime uno o dos patos.
random 1
devuelve un número (punto flotante) entre 0 y 1. Ese número se pasa como argumentoselect
junto con la matriz[s,""]
. El número aleatorio se redondea al entero más cercano (0 o 1), y el elemento de matriz en ese índice se selecciona de la matriz.Llamar con:
Salida:
Versión alternativa de 56 bytes:
fuente
World of Warcraft 81 Bytes
Aquí hay una macro que puedes ejecutar en World of Warcraft.
fuente
/run for x=1,random(1,9)do print("Duck")end print("Goose")
Minecraft <1.13,
7254 bytesLo siento, tuve que hacerlo.
Instrucciones:
data/functions/minecraft/ddg.mcfunction
/function ddg
en la consola de juegosCómo funciona:
Emite la palabra "pato" para cada entidad en el mundo, luego emite la palabra "ganso". Dado que las entidades están constantemente engendrando y desapareciendo, el número de "pato" no será consistente. Utilicé en
tellraw
lugar del mucho más cortosay
porquesay
genera el nombre de la entidad, mientras quetellraw
genera exactamente lo que se le dice.Captura de pantalla
Editar: se cambió {"text": "duck"} a solo "duck" (y lo mismo con "goose")
fuente
JavaScript,
4544423937 bytesTiene el potencial de producir un error de desbordamiento.
Pruébalo
fuente
Octava ,
3833 bytesEste no es el más corto (son 36 bytes), pero es mi favorito. La explicación está en la parte inferior.
Pruébalo en línea!
Algunas variaciones más cortas:
Esto funciona en principio (33 bytes), pero los intérpretes en línea agota el tiempo de espera:
Agregar algunos bytes para acortar la salida hace que sea 35 o 36 bytes:
Explicación:
Solo explicaré el último al azar. Los otros son similares, pero usan la cantidad de días desde el 1 de enero de 0000 hasta hoy.
rand
devuelve un número aleatorio en el intervalo (0, 1) . Por lo tanto,1/rand
devuelve un número mayor que 1 . Dado que un rango1:f
, dondef
es un flotante aleatorio mayor que 1, es idéntico a1:floor(f)
,1:1/rand
crea un rango 1 .. x , donde x> = 1 .Trataré de explicar esto como si Octave fuera un lenguaje basado en la pila.
fuente
disp(['duck '+~pwd';'goose'])
? No estoy seguro si esto es lo suficientemente "indeterminado"Perl 5 , 20 bytes
Primero un práctico 26 bytes:
Patos 1 a 9 veces antes de ser engullido.
Pruébalo en línea!
Pero si tiene mucha memoria y tiempo, esta versión de 20 bytes (como lo sugiere Chris ) también funciona:
Esto también supone que el problema del año 2038 se resolverá para Perl 5 , de lo contrario será inválido durante 1 segundo dentro de 20 años.
fuente
1+$^T%9
a solo$^T
, aún funciona y ahorra 4 bytes.Python 2 ,
3634 bytes¡Pruébelo en línea!
La sugerencia de Kevin Cruijssen nos lleva a 34 bytes:
fuente
((id(id)%5)+1)
a-~(id(id)%5)
para deshacerte del paréntesis. Los consejos para jugar golf en <todos los idiomas> y los consejos para jugar golf en Python pueden ser interesantes de leer. ¡Disfruta tu estancia!id(id)
puede serid(0)
o me estoy perdiendo algo?id(0)
un par de computadoras diferentes sugiere que es una constante.id([])
. Esto debería inicializar una lista distinta cada vez que se ejecuta el programa, lo que en teoría debería dar como resultado consistentemente direcciones de memoria diferentes.Z Shell (+ wget y Netpbm),
168160150148145135120 bytesNo es la solución más corta, pero tuve ganas de darle un giro a este desafío (inspirado en la solución de @ AlexG a este otro problema ).
Este script genera una imagen PPM que contiene entre 1 y 8 imágenes de patos y una imagen de un ganso en la parte inferior en la salida estándar. Descarga las dos imágenes fuente de Wikipedia, por lo que el acceso a Internet es necesario para que funcione.
Salida de muestra convertida a JPEG a través de pnmtojpeg :
fuente
R , 35 bytes
Pruébalo en línea!
rexp()
produce un número aleatorio a partir de una función de disminución exponencial.+1
para asegurar al menos un pato. Todas las líneas después de la primera incluyen un espacio inicial (que es el separador predeterminadocat
), pero esto está permitido.fuente
exp(-1)
o alrededor del 36.8%.\n
ya que es un byte más corto. Si visita el "Pruébelo en línea!" enlace puede ver que el efecto es el mismo.Bash ,
393837 bytesPruébalo en línea!
Imprime un número de patos igual al número de dígitos en un número entero distribuido uniformemente en [0,32767] (por lo tanto, la mayoría de las veces, cinco patos (un buen número de patos)).
-1 byte cada uno gracias a @Chris y @sch señalando pares de citas que no estaban presionando su peso.
fuente
\n
con\\n
.sed s/[0-9]/duck\\n/g<<<$RANDOM\goose
puede afeitarse un bytesed
no es completamente portátil. En algunas plataformas, puede salirse con una barra invertida\n
. En otros no obtendrá una nueva línea, no importa lo que haga.Pure Bash (sin utilidades externas), 25
Basado en la respuesta de @ SophiaLechner , esto también imprime una buena cantidad de patos .
La idea de @ OlivierDulac de usar el script PID shell almacenado en el
$
parámetro ahorra 5 bytes.Pruébalo en línea .
fuente
RANDOM
a$
afeitar 5 bytes? Y uno también podría hacer una cadena muy larga de patos:yes duck|head -n $$;echo goose
$$
es aceptable, ¡gracias!yes duck | head -n $$;echo goose
) como alternativa (más larga que la suya, pero uno tiene MUCHOS patos por 5 caracteres adicionales ^^)Rubí , 30 bytes.
Pruébalo en línea!
Nota: realmente 31 bytes sin el
\n
truco.fuente
Bash + Coreutils,
3627 bytesImprime demasiados patos (entre 2 y
cat /proc/sys/kernel/pid_max
), luego un ganso.Ahorró nueve bytes gracias a Digital Trauma y Olivier Dulac.
Pruébalo en línea! (pero tenga en cuenta que puede truncarse ocasionalmente)
Misma longitud, pero sin
echo
:Pruébalo en línea!
a
es el comando anexarsed
y seq
cierra. Ambos solo se ejecutan en la línea$$
, que corresponde al PID.fuente
head -n $((1+(RANDOM % 5)))
$$
lugar de$RANDOM
para mi respuesta . Creo que podrías usar lo mismo para ahorrarte 5 bytes. Ah, y pruebased
también:yes duck|sed 1$$q;echo goose
yes duck|sed $$q;echo goose
está bien: no creo que su script tenga un PID <1.PowerShell ,
353028 bytesPruébalo en línea! (versión modificada)
Genera una matriz de
Get-Random
número de artículos. Podría tomar un tiempo. Esto agrega una+1
para garantizar que obtengamos al menos unoduck
. La versión modificada también incluye un-ma
indicador ximum5
para que pueda ver que el programa funciona como se esperaba (la versión modificada se imprimirá 1, 2, 3 o 4duck
s antes degoose
).La matriz y la
goose
cadena solitaria se dejan en la tubería, y lo implícitoWrite-Output
nos da valores separados por la nueva línea de forma gratuita.No sabes lo difícil que fue para mí no cambiar la última línea a "pato gris" ...
fuente
0..(random)|%{'duck'};'goose'
parece un 29, y también generará en algún lugar hasta [int] :: MaxValue (2,1 mil millones) patos antes de un ganso. (Y0..0
imprime un pato)Python 2 , 54 bytes
¡Pruébelo en línea!
fuente
C # (compilador interactivo de Visual C #) , 55 bytes
Pruébalo en línea!
fuente
Brachylog ,
2421 bytes-3 bytes gracias a Erik the Outgolfer
Pruébalo en línea!
En celebración del Idioma del mes , mi primera publicación de brachylog El flujo de control en este idioma es genial.
Cómo funciona:
fuente
Geometry Dash World 2.2 Editor - 4 objetos
Explicación:
El disparador BG es el disparador aleatorio actual de 2.2, por lo que alterna el ID de grupo 1 o 2.
El primer "PATO" tiene una identificación de grupo de 1, lo que hace que tenga un 50% de posibilidades de ser eliminado o no (activado).
No hay ningún objeto con el ID de grupo 2 en este nivel, por lo que hay un 50% de posibilidades de que se muestren 2 "PATO".
Cómo reproducir esto:
El primer "PATO" tiene una ID de grupo de 1.
Goose y 2nd duck no tienen ID de grupo
Dentro del disparador aleatorio.
fuente
05AB1E ,
1514 bytesPruébalo en línea!
Imprimirá 2, 5 o 6 patos y luego ganso.
-1 byte gracias a @Emigna usando 'para una sola palabra comprimida (pato)
fuente
'М
ya que pato es una sola palabra.['ÐœTΩ#].•zíΘ•»
'Ðœ₁Ω.D.•zíΘ•»
APL (Dyalog) , 22 bytes
1 byte guardado gracias a @EriktheOutgolfer
Pruébalo en línea!
fuente
'Goose'⊣⎕←⍣(?9)⊢'Duck'
Retina , 17 bytes
Pruébalo en línea!
Pruébalo en línea!
Imprime 1 o 2 patos, con la misma probabilidad.
Explicación
Establezca la cadena de trabajo
duck
e imprímala con un salto de línea final (\
). Luego, esto se envuelve en otra etapa de salida, pero esta tiene?
aplicada la bandera aleatoria ( ), por lo que solo se imprime con una probabilidad del 50%.Reemplace
duck
congoose
, que se imprime implícitamente al final del programa.Aquí hay una alternativa divertida que imprime 1 pato con 50% de probabilidad, 2 patos con 25%, 3 patos con 12.5% ...:
fuente
Vim (script) en Linux,
4643 bytes (4946 con:
al inicio de la línea)Ejecutado como
vim -S filename
o pegado en ejecuciónvim
con:
antes de cada línea.fuente
\d
más[0-9]
. Además, parece que vim no requiere la nueva línea final, por lo que puede ser de 45 bytes :)> <> ,
3122 bytesPruébalo en línea!
-9 bytes basados en la revisión de No es un árbol
fuente
l?!;
y salir con un error.Befunge 98 ,
383025 bytesPruébalo en línea!
Duck
cabe en una sola cadenafuente
#
en la segunda líneawhitespace within a line is fine
para que pueda recortar un par de citas (incluso si la salida se ve rara)T-SQL ,
70 4443 bytes (Muchos patos)Gracias @Zac Faragher!
Versión revisada,
54 4340 bytes (1 o 2 patos)Gracias @BradC!
Parece que no puedo hacer que esto se ejecute correctamente en SQL Fiddle , pero funciona bien en LINQPad y SSMS.
No estoy seguro de si esta es una limitación conocida de SQL Fiddle o simplemente estoy haciendo algo mal
fuente
select
aprint
y reemplazar la final'duck'select'goose'
con'duck(linebreak)goose'
(con un salto de línea literal, por supuesto)while rand()<.5print'duck'print'duck(linebreak)goose'
por 43.while
aif
. Imprime (al azar) uno o dos patos, lo que (creo) aún satisface el desafío.Powershell -
3130 bytesAdvertencia : lo más probable es que termines con muchos patos.
Random
incluye los valores de 0, porInt32.MaxValue
lo que, dependiendo de cuán aleatorio sea su número, esto podría ser una gran cantidad de graznidos.fuente
$
frente de(Random)
. Pruébalo en línea!Fisión ,
2419 bytesPruébalo en línea!
-5 bytes gracias a Martin Ender
fuente
Brachylog , 21 bytes
Pruébalo en línea!
Oye, el idioma del mes está inactivo, ¡vamos a mejorar un poco las cosas!
fuente
Befunge
5735 bytes (el perímetro de todo el campo es de19x317x2 caracteres) Gracias a Karhell por la mejora.La segunda línea pone pato y una nueva línea en la pila (al revés) y la genera como una cadena. Después de ese 75% de posibilidades de volver al inicio e imprimir pato nuevamente, 25% (cuando el signo de interrogación decida bajar) para imprimir ganso y detenerse.
fuente
55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"<
reduciría su código a 35 bytes