El texto del libro para niños Polar Bear, Polar Bear, What Do You Hear? Tiene un patrón muy simple. Puede usar el texto para enseñar conceptos introductorios de programación.
Mi hijo se aburrió rápidamente con esta idea, así que decidí jugar al golf con ella.
El reto
En el lenguaje de programación que elija, escriba el programa más pequeño posible que imprima el siguiente texto. La salida debe coincidir exactamente, incluyendo mayúsculas, minúsculas y puntuación.
Polar Bear, Polar Bear, what do you hear?
I hear a lion roaring in my ear.
Lion, Lion, what do you hear?
I hear a hippopotamus snorting in my ear.
Hippopotamus, Hippopotamus, what do you hear?
I hear a flamingo fluting in my ear.
Flamingo, Flamingo, what do you hear?
I hear a zebra braying in my ear.
Zebra, Zebra, what do you hear?
I hear a boa constrictor hissing in my ear.
Boa Constrictor, Boa Constrictor, what do you hear?
I hear an elephant trumpeting in my ear.
Elephant, Elephant, what do you hear?
I hear a leopard snarling in my ear.
Leopard, Leopard, what do you hear?
I hear a peacock yelping in my ear.
Peacock, Peacock, what do you hear?
I hear a walrus bellowing in my ear.
Walrus, Walrus, what do you hear?
I hear a zookeeper whistling in my ear.
Zookeeper, Zookeeper, what do you hear?
I hear children...
...growling like a polar bear,
roaring like a lion,
snorting like a hippopotamus,
fluting like a flamingo,
braying like a zebra,
hissing like a boa constrictor,
trumpeting like an elephant,
snarling like a leopard,
yelping like a peacock,
bellowing like a walrus...
that's what I hear.
code-golf
string
kolmogorov-complexity
aaaantoine
fuente
fuente
B
yC
adentroPolar Bear
yBoa Constrictor
necesarias? (En Batch esto me cuesta el 10% de mi recuento de bytes ...)Respuestas:
05AB1E,
349331330322314311 bytesPruébalo en línea
Explicación
•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Cadena empaquetada que contiene los sonidos
GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL
35B0¡…ing«lV
Desempaquete, divida en 0, agregue "ing" a cada palabra, convierta a menor y almacene en la variable Y
•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
Cadena empaquetada que contiene los animales
POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER
36B1ð:0¡™
Desempaquete, reemplace 1 con espacio, divida en 0 y convierta a título
D©„, «D‚ø
Duplicar, guardar para registrar para su uso posterior, agregar "," a una copia, duplicar y comprimir.
“€À€·€î—«?“¶«¸
Las palabras del diccionario "¿qué oyes?", Seguidas de una nueva línea, agregadas a una nueva lista
‘€JU
Producto cartesiano de la lista de "Animal, Animal" y "¿qué oyes? \ N", aplanado y unido y lo almacena en la variable X. Produce una lista de cadenas de la forma "Animal, Animal, ¿qué oyes? N ".
¦“„¾“‚˜l
Tome la lista restante de animales de antes, retire al cuidador del zoológico y agregue niños, convierta a minúsculas.
v
Para cada animal:
Presione "Oigo 0 en mi oído", divida en 0 y presione como cadenas separadas.
yð«Y¦õ‚˜Nè«
Presione "sonido animal" con niños que no tienen sonido
sr„ a
Presione "a" en el lugar correcto
N5Qi'n«}
Si el animal es "Elefante" agregue "n"
ð«
Agrega espacio.
N9›ijrj¨ðs«…...«}
Si el animal son niños, elimine el espacio y agregue "..."
srJˆ}
Únase a la oración "Escucho un sonido de animal en mi oído". (así como el secundario), almacenar en una matriz global y finalizar el bucle
X¯‚ø€J
Recupere las primeras líneas, cierre y únase produciendo la primera parte de la rima "Animal, Animal, ¿qué oye? \ NOigo un sonido de animal en mi oído".
vy,¶?}
Imprimir seguido de una nueva línea.
…...DU?
Imprima "..." y almacene una copia en la variable X.
Y¨v
Para cada sonido, excepto "silbidos":
N__i ', ¶} Para cada línea excepto la primera, comience con ", \ n" (haciendo que la coma vaya a la línea anterior)
yð“€è€…“
Empuje de sonido, espacio y "como un"
N6Qi'n«}
Si Elefante agrega "n".
ð®NèJl?}X,
Recupera el animal guardado en el registro, une todo, imprime y finaliza el ciclo seguido de "...". Esto produce las líneas "sonido como un (n) animal".
“€Š's€À I—«.“?
Imprimir la cadena del diccionario "eso es lo que escucho".
fuente
PHP,
420414434414412 bytesllamar desde CLI o anteponer
<pre>
a salida.Descompostura
fuente
JavaScript,
545541497 bytes¡Todo un desafío divertido!
¡Gracias Downgoat por ahorrarme
27toneladas de bytes usandoatob
, y Titus por 4 bytes!Sin golf:
fuente
a.map((n,m)=>n>9||(p+=s[n]...))
c=console.log;
al principio y luego use c () para guardar 6 bytes. O simplemente guarde la cadena en una variable e imprímala una vez con alert ().c=console.log
no funciona porquelog
debe tener unathis
deconsole
o produce un error. (? A menos que no lo hace en algunos navegadores / ambientes) La idea de poner todo en una buena sonidos de cuerda, aunque/// ,
523512 bytesPruébalo en línea!
608 bytes menos que el mensaje real (1120), ¡esto es menos de la mitad (560)!
fuente
Dyalog APL , 387 bytes
Para facilitar la lectura:
⎕UCS¯2(219⌶)¯128+⎕UCS'
...'
⎕UCS '
...'
convertir cadenas a puntos de código Unicode¯128+
restar 128 para obtener -128 ≤ n ≤ 127¯2(219⌶)
un-zlib⎕UCS
convertir puntos de código Unicode a cadenaLa cadena de origen son los siguientes 365 bytes de puntos de código Unicode zlib'ed:
fuente
Python 3,
497484480 bytes(El crédito por 13 bytes guardados debe ir a Gábor Fekete, y Taylor López guardó 4 bytes adicionales).
Así que probablemente puedas adivinar que iba a usar un lenguaje como Python como herramienta de enseñanza. Este era el programa antes de comenzar a jugar golf.
fuente
a=A[i]
aa,b=A[i]
y luego puede escribira
y enb
lugar dea[0]
ya[1]
. Esto ahorrará 12 bytes.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
aN=lambda m:"an"[:("E"==m[0])+1]
yn=a[0]+", ";P(n+n+"what do you hear?")
paraa+=", ";P(a+a+"what do you hear?")
ahorrará 2 bytes más.len(A)
, ya que el propósito de este desafío es simplemente generar la salida estática (no tratar con la entrada dinámica), ¿es aceptable usar un código rígido11
para guardar bytes?Pyth -
427384 BytesPruébalo aquí - enlace permanente
fuente
ing
? Me vuelvo loco al ver que PHP venció a Pyth.a elephant
.C #,
575525520526507504497494493 bytesC # lambda donde la salida es a
string
.Explicación
t
como una cadena con el formatonoise,animal,noise,animal,...
y dividida por,
.r
ys
.r
Es la primera parte de la canción ys
la última parte.z
yn
están aquí para manejarElephant
.t
y construyer
ys
en el mismo bucle. Ternario extraño + material interpolado.Código
Pruébalo en línea!
fuente
Python 2 - 454 bytes
fuente
R
518509482477474465452456 bytesEnlace a R-Fiddle para probar el código
children
fuera del vectora
, y se deshizo de la entrada correspondiente en eld
vector para guardar 8 byteschildren
, se ahorraron otros 27 bytes.tolower
función, guardó 5 byteswriteLines
concat
y formateado apropiadamente (agregado\n
en lugares) guardado 3 bytesd
solo hay 7 elementos, no los 11 completos, R simplemente volverá al inicio nuevamente. Como 11 <14 entonces esto funciona para nosotros. Guardado 9 bytes.cat
La función se separaba con" "
, cambió de nuevo awriteLines
. Se agregaron 4 bytes (cat
se puede arreglar agregando,sep=""
a la función)fuente
' '
antes de cada elemento dea
después"Polar Bear"
. ¿Es normal?C #,
592572 bytes¡Lo pasé muy bien tomando este desafío con mi colega! Gracias por la idea
Formateado:
EDITAR: Gracias por sus numerosos e impresionantes consejos, me ayudaron mucho y trataré de que los otros funcionen también.
fuente
new[]
en su lugar o.new string[]
También puede convertir esto en una función anónima como en la respuesta de @ aloisdga elephant
trampa (yo también lo hice). Lo esan elephant
;)Lote,
650647 bytesPorque
%*
es lo más cercano que tiene Batch a una matriz. Si puedo usarPolar bear
yBoa constrictor
luego puedo ahorrar un 10% ... pero todavía soy más del 50% del texto original ...Editar: guardé 3 bytes configurando
e=echo(
un en(
lugar de un espacio, lo que me permite usarlo para hacer eco de líneas en blanco, aunque luego tengo que escribirlo por@echo off
completo.fuente
Bash + zcat, 402 bytes
Solo una broma:
un script bash de 2 líneas que se ajusta y canaliza la segunda línea a zcat.
La segunda línea es el texto comprimido.
Cómo prepararlo: todo el texto en un archivo
a
. EntoncesEl archivo así creado cuando se ejecuta devuelve el texto inicial, 402 Bytes.
fuente
tail -n+2 \$0|zcat;exit
seguido por una nueva línea y una cadena binaria de 379 bytes (la versión comprimida del texto propuesto). ¿Sabías el motivo del voto negativo? (es un procedimiento semi estándar para bash autoinstalando scripts con un archivo interno, en mi humilde opinión, no es tan diferente del uso de una biblioteca en c ++).zcat
), por lo que su encabezado debe ser ( Bash + coreutils, 402 bytes ) en lugar de ( Bash (con zcat) 402 ). Y, ¿puedes editar tu respuesta (solo agrega<!>
al final de tu publicación)? Quiero eliminar elzcat
no es de coreutils, viene congzip
. En muchos sistemas hay un script que llamagzip -cd "$@"
... Por cierto, modifiqué en Bash + zcat, 402 bytes.F #,
591589579576573567552 bytesEste es mi primer intento de golf de código con un idioma que me gusta. Apuesto a que hay algunas formas en que esto podría acortarse. Se ejecuta en FSI, por lo que no es necesario contar con .NET repetitivo.
Editar: afeitado 10 bytes mediante la eliminación
\r
. Todavía se muestra bien en VSCode, así que imagínate. Corte otros tres bytes con la composición de la función, y otros tres con una lambda, luego seis con un bucle for en lugar de Seq.iter (deshacerse de la lambda). Finalmente se recortaron 15 bytes reorganizandoa(s:string)
fuente
Emacs Lisp, 576 (621) bytes
Al arreglar "un elefante", lleva un poco más de tiempo:
Sin golf:
fuente
^[aeiou]
a^e
, ¿no?C, 596 bytes
Llama
f()
sin ningún argumento. Este no es el mejor golf del mundo, probablemente pueda reducirlo más.Pruébalo con ideone.
fuente
a[99][99]
->**a
(-6). No puede llamarf()
sin argumentos aquí, necesita unn
. Reemplazarf(n){
conf{n;
. Otro -1 aquí. Además,f()
ahora es invocable.**a
significa una matriz de matrices de caracteres (o un puntero de puntero de caracteres) y, para mí, siempre ha funcionado (gcc 4.8). ¿Qué compilador usas? Si no usa gcc, debe especificarlo. Si usa gcc, es un valor predeterminado.a[99][99]
cona[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 bytessin golf:
Básicamente, solo un bucle que construye dos cadenas que representan las dos partes de la historia. El
'n'[:'el'in n]
maneja la "an" para elefante. Las[44:-30]
chuletas de la parte delantera "escucho un oso polar gruñir en mi oído" y el rastro "silbando como un cuidador del zoológico".fuente
QB64 (QuickBASIC), 581 bytes
El código se expande un poco cuando lo arroja en el intérprete, pero este archivo fuente es válido para cargarlo tal cual. Si desea ver toda la salida antes de que se desplace, deberá agregar una
width 80,46
declaración al principio.fuente
GOSUB
/ enRETURN
lugar deCALL
/SUB
/END SUB
. Además, puede colocar las comillasDATA
para todas las entradas que no tienen espacios en ellas. Finalmente, dado que solo hay un animal que comienza con una vocal, enA$="Elephant"
realidad es 1 byte más corto queLEFT$(A$,1)="E"
. Buen uso deRESTORE
, por cierto!LUA 535 bytes
sin golf:
Pruébalo en línea
fuente
PHP, 366 bytes
Respuesta perezosa, pero ¿por qué escribir un descompresor personalizado cuando gzip está disponible?
Volcado hexadecimal de código PHP (se puede guardar con xxd -r )
Utilicé algunas iteraciones de zopfli para convertir el texto fuente a 349 bytes de datos comprimidos, evitando el carácter 'que de otro modo tendría que ser escapado con barras invertidas.
fuente
Japt ,
308303299295288280294289286 bytesContiene un montón de no imprimibles; siga el enlace a continuación para verlos.
Pruébalo
+14 bytes porque había aumentado la línea de la morsa; tendré que volver a pasar la próxima semana para ver si puedo recuperar alguno de esos bytes.
fuente
Powershell
921889886898 Bytesno es perfecto, pero ahorra 300 bytes :)
EDITAR: Gracias Jonathan Frech, guardé 32 Bytes. Y gracias Veskah por corregir la Salida.
fuente
ö
byte más eficiente?ö
solo se representa usando un solo byte en algunas páginas de códigos, UTF-8 requiere dos bytes para este carácter.an elephant
También hay un salto de línea adicional entre las estrofas anteriores que se puede eliminar eliminando"n"
.clojure, 526 bytes
Aquí está mi intento inicial. Me encanta el formato y lo ilegible que es. Espero que las advertencias
use 'clojure.string
sean aceptables.Pruébalo en línea.
Código formateado:
fuente
Java,
571555538o 516 bytesPero solo se requieren 516 bytes para obtener resultados en JShell
fuente
an
vsa
.. Me he fijado y golfed a 507 bytesi
con0
hasta10
cambiarb=a[i-1]
conb=a[i++]
y eliminar el incremento de donde se encuentra actualmente.Swift2, 519 bytes
fuente
Haskell
537499497 BytesUsando la convención de que una solución no tiene que ser ejecutable, solo produce la salida a través de alguna función, esto se puede acortar a 479 Bytes. La salida está en
g
:fuente
C (clang) , 552 bytes
Pruébalo en línea!
fuente
Perl 5 , 413 bytes
Pruébalo en línea!
fuente
JavaScript, 424 bytes
Pruébalo
fuente
Pyth, 342 bytes
Pruébelo en línea aquí .
Explicación a seguir.
fuente