Oso Polar, Oso Polar, ¿qué escuchas?


50

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.

66
Kolmogorov-complejidad sería una etiqueta bueno para este
charredgrass

3
¿Son mayúsculas By Cadentro Polar Beary Boa Constrictornecesarias? (En Batch esto me cuesta el 10% de mi recuento de bytes ...)
Neil

¿Se permite enviar un hash y aplicar fuerza bruta a la solución con un conjunto restringido? : D
polym

44
¡Este es un primer desafío muy bonito!
Alex A.

1
Yo haría +1 pero tienes 42 votos a favor, y ¿quién soy yo para perturbar los caminos de la galaxia?
FantaC

Respuestas:


34

05AB1E, 349 331 330 322 314 311 bytes

•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•35B0¡…ing«lV•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•36B1ð:0¡™D©„, «D‚ø“€À€·€î—«?“¶«¸â€˜€JU¦“„¾“‚˜lv„I “—«0€†€¯¶å.“«0¡`yð«Y¦õ‚˜Nè«sr„ aN5Qi'n«}ð«N9›ijrj¨ðs«…...«}srJˆ}X¯‚ø€Jvy,¶?}…...DU?Y¨vN__i',¶}yð“€è€…“N6Qi'n«}ð®NèJl?}X,“€Š's€À I—«.“?

Prué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:

„I “—«0€†€¯¶å.“«0¡`

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".


30
Este está convocando a Cthulhu.
aloisdg dice Reinstate Monica

66
No puedo ver dónde termina el código y comienzan los datos empaquetados.
Adám

44
@ Adám lo sé. Se parece mucho a galimatías :) Eventualmente agregaré una explicación que con suerte lo aclarará. Sin embargo, es posible que desee probarlo un poco más.
Emigna

28
Probablemente así es como los laicos imaginan el código.
noɥʇʎԀʎzɐɹƆ

1
No tengo idea de lo que acabo de leer ...
Nico

9

PHP, 420 414 434 414 412 bytes

llamar desde CLI o anteponer <pre>a salida.

$v=[growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl];$a[6]=n;foreach($n=['polar bear',lion,hippopotamus,flamingo,zebra,'boa constrictor',elephant,leopard,peacock,walrus,zookeeper]as$i=>$p)echo$i?"I hear a$a[$i] $p $v[$i]ing in my ear.

":"",$q=ucwords($p),", $q, what do you hear?
",$i>9?"I hear children...

...":""&$z[]="$v[$i]ing like a$a[$i] $p";echo join(",
",$z),"...
that's what I hear.";
  • un par de avisos para constantes indefinidas; La conversión implícita de PHP a una cadena literal se activa nuevamente
  • agregar la "n" para "un elefante" tomó 20 bytes ... hmpf.
  • recuperó los 20 bytes reordenando cosas :)

Descompostura

$n=['polar bear',lion,hippopotamus,flamingo,zebra,'boa constrictor',elephant,leopard,peacock,walrus,zookeeper];
$v=[growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl];
$a[6]=n;
// loop through nouns with index $i
foreach($n as$i=>$p) echo
    // print first part:
        // not first noun: print second line to previous step
        $i?"I hear a$a[$i] $p $v[$i]ing in my ear.\n\n":"",
        // uppercase the first letter of each word in the noun, print
        $q=ucwords($p),
        // print uppercase noun again and the rest of the line
        ", $q, what do you hear?\n",
        // for last noun print bridge, else print nothing
        $i>9?"I hear children...\n\n...":""
    // ... AND add line to second part
        &$z[]="$v[$i]ing like a$a[$i] $p"
;
// print second part and final line
echo join(",\n",$z),"...\nthat's what I hear.";

8

JavaScript, 545 541 497 bytes

a="Polar Bear|Lion|Hippopotamus|Flamingo|Zebra|Boa Constrictor|Elephant|Leopard|Peacock|Walrus|Zookeeper".split`|`;s=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!Ëe`.split`z`;a.map((m,n)=>{console.log(m+", "+m+", what do you hear?\n "+((n>9)?"I hear children...\n":"I hear a"+(n==5?"n ":" ")+a[n+1].toLowerCase()+" "+s[n+1]+"ing in my ear.\n"))});p="...";a.map((m,n)=>{if(n>9)return;p+=s[n]+"ing like a"+(n==6?"n ":" ")+m.toLowerCase()+(n>8?"...\nthat's what I hear.":",\n")});console.log(p)

¡Todo un desafío divertido!

¡Gracias Downgoat por ahorrarme 27 toneladas de bytes usando atob, y Titus por 4 bytes!

Sin golf:

a="Polar Bear|Lion|Hippopotamus|Flamingo|Zebra|Boa Constrictor|Elephant|Leopard|Peacock|Walrus|Zookeeper".split`|`;
s=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!Ëe`.split`z`;
a.map((m,n)=>{
  console.log(m+", "+m+", what do you hear?\n "+((n==10)?"I hear children...\n":"I hear a" + (n==5?"n ":" ") + a[n+1].toLowerCase() + " " + s[n+1] + "ing in my ear.\n"))
});
p="...";a.map((m,n)=>{
  if(n==10) return;
  p+=s[n] + "ing like a" + (n==6?"n ":" ") + m.toLowerCase() + (n==9?"...\nthat's what I hear.":",\n")
});
console.log(p);

a.map((n,m)=>n>9||(p+=s[n]...))
Neil

1
@ OldBunny2800 Para jugar al golf, puede establecer variables globales. (¡No hagas esto en una función recursiva!)
Neil

1
Su código no funciona, supongo que stack intercambió algunas letras en su código base64. Después de la división obtengo ["ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q", "", "bramido", "why2U ="].
lolesque

1
Defina 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 ().
lolesque

1
El @lolesque c=console.logno funciona porque logdebe tener una thisde consoleo 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
apsillers

7

/// , 523 512 bytes

/_/\/\///:/ar_!/, what do you he:?
I he: _$/!a_#/ing in my e:.

_%/ing like a_&/, _*/,
_0/Pol: Be:_1/ion_2/ippopotamus_3/lamingo_4/ebra_5/oa _S/onstrictor_6/lephant_7/eopard_8/eacock_9/alrus_Q/ookeeper_R/trumpet/0&0$ l1 ro:#L1&L1$ h2 snort#H2&H2$ f3 flut#F3&F3$ z4 bray#Z4&Z4$ b5cS hiss#B5CS&B5CS$n e6 R#E6&E6$ l7 snarl#L7&L7$ p8 yelp#P8&P8$ w9 bellow#W9&W9$ zQ whistl#ZQ&ZQ!children...

...growl% pol: be:*ro:% l1*snort% h2*flut% f3*bray% z4*hiss% b5cS*R%n e6*snarl% l7*yelp% p8*bellow% w9...
that's what I he:.

Pruébalo en línea!

608 bytes menos que el mensaje real (1120), ¡esto es menos de la mitad (560)!


6

Dyalog APL , 387 bytes

⎕UCS¯2(219⌶)¯128+⎕UCS'øZýÓÁî°üÁ~`Û¯ß(4Õ+ÖjáïvXô ¶Dhkë ©4¹³`LxÖ4¢gͼ4ªBáDÚN¼ùV ÂÅF]@¸hÆà bKÚ¸_oQãÔÝ ¸$8§ú_ÔÈxÖ ~6*ãªd ¿ð>¥ÐB8þôÍxwÄ6Å
ô¡é¢wBlDµ¯ë
Ãbqè+ý+ÜÈýgu!gWËØ#0="«ë"HDÝÀV·¦/ÕMÆí}h<àì7å ÝÒëëñX³ýM <dÄ<ëmµñqP]¥c¬l¾¤ìÚã/$ÝÕqÙÞîCLéMÝÏ}OÔϤr$¤è©~ì2[¢{·YWÒ俦à¶)YØ©;s÷¬¥+ó&¿ÉâgËr
,Ýî©)¥Ö­2è´ÝÅd{úK5­·Õ}ýÚ'

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 cadena

La cadena de origen son los siguientes 365 bytes de puntos de código Unicode zlib'ed:

F8 5A FD D3 C1 EE 04 B0 8C FC C1 7E 60 DB AF 91 DF 28 34 D5 2B D6 6A E1 EF 15 76 96 58 F4 09 B6 44 11 93 04 68 6B EB A0 A9 94 34 B9 10 98 0F B3 60 4C 78 0C D6 91 1C 34 A2 89 67 CD BC 34 AA 42 95 E1 44 9E DA 4E BC 0B 0F F9 87 85 56 20 83 C2 C5 46 5D 40 B8 68 C6 E0 20 92 62 13 81 89 4B DA B8 5F 9A 6F 51 E3 D4 DD 9F A0 B8 24 38 A7 FA 5F D4 C8 78 7F D6 A0 7E 36 2A E3 AA 64 20 BF F0 3E A5 D0 42 9A 95 38 FE F4 CD 8A 78 99 77 C4 17 89 11 10 36 82 C5 0D 8A 9A F4 A1 12 E9 A2 92 77 9D 42 1E 6C 44 B5 AF EB 0D 04 C3 62 71 87 9C E8 2B FD 2B DC 04 C8 FD 67 75 21 67 57 04 CB D8 23 12 30 9A 3D 22 AB EB 22 48 9E 44 DD C0 56 B7 87 85 A6 2F D5 03 4D 9D C6 ED 7D 1E 68 3C E0 EC 37 9C 94 08 86 E5 09 DD D2 EB EB F1 58 B3 FD 4D 20 04 3C 17 64 C4 3C EB 6D B5 F1 11 89 71 50 5D A5 63 AC 6C 9A BE A4 EC DA E3 2F 24 DD D5 71 D9 DE EE 04 43 4C E9 4D DD CF 7D 4F 13 D4 CF 13 A4 72 24 A4 E8 1A 9E A9 7E EC 1F 32 5B 19 10 A2 7B B7 01 59 57 D2 E4 BF A6 E0 B6 29 94 59 D8 A9 3B 73 1D 94 9B F7 AC A5 2B F3 26 BF C9 E2 67 7F CB 72 0A 2C DD EE A9 29 A5 D6 AD 92 32 E8 B4 DD C5 64 7B FA 8A 4B 35 AD B7 D5 7D 82 0F FD 1 DA

6

Python 3, 497 484 480 bytes

P=print
N=lambda m:"an"[:("E"==m[0])+1]+" "+m.lower()
h="I hear "
A=[a.split("|")for a in"Polar Bear|growl:Lion|roar:Hippopotamus|snort:Flamingo|flut:Zebra|bray:Boa Constrictor|hiss:Elephant|trumpet:Leopard|snarl:Peacock|yelp:Walrus|bellow:Zookeeper|whistl".split(":")]
for i in range(11):
 a,b=A[i]
 if i:P(h+N(a)+" "+b+"ing in my ear.\n")
 a+=", ";P(a+a+"what do you hear?")
P(h+"children...\n\n..."+",\n".join([z+"ing like "+N(y)for y,z in A[:-1]])+"...\nthat's what I hear.")

(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.

def startsWithVowel(name):
    firstLetter = name[0]
    return firstLetter in ["A", "E", "I", "O", "U"]

def aOrAn(name):
    return "an" if startsWithVowel(name) else "a"

animals = [
#    NAME (0),     SOUND (1)
    ("Polar Bear", "growling"),
    ("Lion", "roaring"),
    ("Hippopotamus", "snorting"),
    ("Flamingo", "fluting"),
    ("Zebra", "braying"),
    ("Boa Constrictor", "hissing"),
    ("Elephant", "trumpeting"),
    ("Leopard", "snarling"),
    ("Peacock", "yelping"),
    ("Walrus", "bellowing"),
    ("Robot Dragon", "screeching"),
    ("Owl", "hooting"),
    ("Monkey", "laughing"),    
    ("Zookeeper", "whistling")]

NAME = 0
SOUND = 1
for animalNumber in range(len(animals)):
    thisAnimal = animals[animalNumber]
    if animalNumber + 1 < len(animals):    
        nextAnimal = animals[animalNumber + 1] 
    else: 
        nextAnimal = None

    print("{n}, {n}, what do you hear?".format(n=thisAnimal[NAME]))

    if nextAnimal != None:
        print("I hear {a} {n} {s} in my ear.".format(n=nextAnimal[NAME].lower(),
                                                     s=nextAnimal[SOUND],
                                                     a=aOrAn(nextAnimal[NAME])))
    else:
        print("I hear children...")

        children = []        
        for animal in animals[:-1]:
            children.append("{s} like {a} {n}".format(n=animal[NAME].lower(), 
                                                      s=animal[SOUND],
                                                      a=aOrAn(animal[NAME])))
        print("...{}...".format(",\n".join(children)))
        print("that's what I hear.")

2
Puede usar la sintaxis de desempaquetado para guardar algunos bytes: cambie a=A[i]a a,b=A[i]y luego puede escribir ay en blugar de a[0]y a[1]. Esto ahorrará 12 bytes.
Gábor Fekete

Cambiar N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()a N=lambda m:"an"[:("E"==m[0])+1]y n=a[0]+", ";P(n+n+"what do you hear?")para a+=", ";P(a+a+"what do you hear?")ahorrará 2 bytes más.
Gábor Fekete

Pregunta general de golf. Donde lo haya hecho 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ígido 11para guardar bytes?
Taylor Lopez

1
@TaylorLopez seguro, es una mala práctica en general, pero para el golf donde el objetivo es minimizar el código, no veo ninguna razón por la que no.
aaaantoine

5

Pyth - 427 384 Bytes

=G"1, 1, what do you hear?\nI hear a 2 in my ear.\n"=Hc"growling/Polar Bear/roaring/Lion/snorting/Hippopotamus/fluting/Flamingo/braying/Zebra/hissing/Boa Constrictor/trumpeting/Elephant/snarling/Leopard/yelping/Peacock/bellowing/Walrus/whistling/Zookeeper"\/FNT
::G\1@H+yN1\2++r@H+yN3Zd@H+yN2)p+::G"I(.|\n)*"k\1@H20"I hear children...\n\n..."FN9
::"1 like a 2,"\1@HyN\2r@H+yN1Z)p"bellowing like a walrus...\nthat's what I hear.

J"%s, %s, what do you hear?"K"I hear a%sing in my ear.\n"=Hc"Polar Bear/roar/Lion/snort/Hippopotamus/flut/Flamingo/bray/Zebra/hiss/Boa Constrictor/trumpet/Elephant/snarl/Leopard/yelp/Peacock/bellow/Walrus/whistl/Zookeeper/growl"\/FN11
%J*2[@HyN)?qNT"I hear children...\n"%Kjd[?qN5\nkr@H+yN2Z@HhyN))p"..."FN9
+%=J"%sing like a%s"[@HtyN+?qN5\nk+dr@HyNZ)?qN8"..."\,)
"that's what I hear"

Pruébalo aquí - enlace permanente


¿Puedes jugar al golf ing? Me vuelvo loco al ver que PHP venció a Pyth.
Tito

1
El código sale a elephant.
Antti29

¡Todos los problemas (incluido el hecho de que PHP venció a Pyth) están solucionados!
KoreanwGlasses

3

C #, 575 525 520 526 507 504 497 494 493 bytes

()=>{var t="growl,Polar Bear,roar,Lion,snort,Hippopotamus,flut,Flamingo,bray,Zebra,hiss,Boa Constrictor,trumpet,Elephant,snarl,Leopard,yelp,Peacock,bellow,Walrus,whistl,Zookeeper".Split(',');string r="",s="",z="a ",n="an ";for(int i=0,j=0;i<21;r+=t[++i]+$", {t[i]}, what do you hear?\nI hear "+(i>19?@"children...

...":(i==11?n:z)+t[++i+1].ToLower()+$" {t[i]}ing in my ear.\n\n"))s+=j<20?t[j]+"ing like "+(j==12?n:z)+t[++j].ToLower()+(++j<20?@",
":@"...
"):"that's what I hear.";return r+s;};

C # lambda donde la salida es a string.

Explicación

  1. Init tcomo una cadena con el formato noise,animal,noise,animal,...y dividida por ,.
  2. Declarar ry s. rEs la primera parte de la canción y sla última parte. zy nestán aquí para manejar Elephant.
  3. Camina ty construye ry sen el mismo bucle. Ternario extraño + material interpolado.
  4. Devuelve la primera parte de la canción seguida de la última parte.

Código

()=>{
    var t="growl,Polar Bear,roar,Lion,snort,Hippopotamus,flut,Flamingo,bray,Zebra,hiss,Boa Constrictor,trumpet,Elephant,snarl,Leopard,yelp,Peacock,bellow,Walrus,whistl,Zookeeper".Split(',');
    string r="",s="",z="a ",n="an ";
    for(int i=0,j=0;i<21;r+=t[++i]+$", {t[i]}, what do you hear?\nI hear "+(i>19?@"children...

...":(i==11?n:z)+t[++i+1].ToLower()+$" {t[i]}ing in my ear.\n\n"))
        s+=j<20?t[j]+"ing like "+(j==12?n:z)+t[++j].ToLower()+(++j<20?@",
":@"...
"):"that's what I hear.";
    return r+s;
};

Pruébalo en línea!


3

Python 2 - 454 bytes

a="polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper,whistl,bellow,yelp,snarl,trumpet,hiss,bray,flut,snort,roar,growl".split(',')
e='...\n\n'
r=range
print'\n'.join([(a[i].title()+', ')*2+"what do you hear?\nI hear "+((i<10)*("a%s %sing in my ear.\n"%("n "[i!=5:]+a[i+1],a[~-~i]))or"children%s..."%e+",\n".join(a[~j]+"ing like a"+"n "[j!=6:]+a[j]for j in r(10))+e+"that's what I hear.")for i in r(11)])

3

R 518 509 482 477 474 465 452 456 bytes

Enlace a R-Fiddle para probar el código

a=c("Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper")
b=c("...growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl")
d=c(rep("a ",6),"an ")
f=tolower(a)
cat(c(paste0(a,", ",a,", what do you hear?\nI hear ",c(paste0(d,f," ",b,"ing in my ear.")[-1],"children..."),"\n\n"),paste0(b,"ing like ",d,f,c(rep(",\n",9),"...\nthat's what I hear."))[-11]))
  • Movido childrenfuera del vector a, y se deshizo de la entrada correspondiente en el dvector para guardar 8 bytes
  • Al ordenar y eliminar los subíndices que se volvieron redundantes al moverlos children, se ahorraron otros 27 bytes.
  • Globalizó la tolowerfunción, guardó 5 bytes
  • Reemplace writeLinescon caty formateado apropiadamente (agregado \nen lugares) guardado 3 bytes
  • Se dio cuenta de que si dsolo hay 7 elementos, no los 11 completos, R simplemente volverá al inicio nuevamente. Como 11 <14 entonces esto funciona para nosotros. Guardado 9 bytes.
  • subíndices globalizados, guardados 13 bytes.
  • catLa función se separaba con " ", cambió de nuevo a writeLines. Se agregaron 4 bytes ( catse puede arreglar agregando ,sep=""a la función)

Bienvenido a PPCG! Esta es una buena primera respuesta. ¿Hay alguna forma de probar su código en línea?
aloisdg dice Reinstate Monica

1
Pruebe esto r-fiddle.org/#/fiddle?id=5pqkHPyL&version=1 aunque tuve que agregar un carácter (barra invertida) para que lea el apóstrofe en "eso es correcto"
Robert Maidstone

Gracias. En R-Fiddle, vi que tienes un ' 'antes de cada elemento de adespués "Polar Bear". ¿Es normal?
aloisdg dice Reinstate Monica

No estoy completamente seguro de lo que quieres decir. ¿Te refieres al espacio en la primera sección del poema? Como en el espacio antes de "Lion" aquí? "Oso polar, oso polar ...... \ nEscucho un ...... \ n León, León ..... \ nEscucho un ..." No me había dado cuenta de esto antes. Proviene de la función cat separándose usando un espacio. Esto se puede solucionar agregando sep = "" a la función, sin embargo, es preferible utilizar writeLines (He cambiado el código de nuevo para escribir líneas)
Robert Maidstone

3

C #, 592 572 bytes

using System;class p{static void Main(){string[] s={"","","Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Contrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper","growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"};for(int i=2;i<13;i++){s[0]+=(s[i]+", "+s[i]+", what do you hear?\nI hear "+(i<12?"a"+(i==7?"n ":" ")+s[i+1].ToLower()+" "+s[i+12]+"ing in my ear.\n\n":"children...\n\n..."));if(i<12)s[1]+=s[i+11]+"ing like a"+(i==8?"n ":" ")+s[i].ToLower()+(i<11?",\n":"...\nthat's what I hear.\n");}Console.Write(s[0]+s[1]);}}

¡Lo pasé muy bien tomando este desafío con mi colega! Gracias por la idea

Formateado:

using System;
class p {
    static void Main() {
        string[] s = { "", "", "Polar Bear", "Lion", "Hippopotamus", "Flamingo", "Zebra", "Boa Contrictor", "Elephant", "Leopard", "Peacock", "Walrus", "Zookeeper", "growl", "roar", "snort", "flut", "bray", "hiss", "trumpet", "snarl", "yelp", "bellow", "whistl" };
        for (int i = 2; i < 13; i++) {
            s[0] += (s[i] + ", " + s[i] + ", what do you hear?\nI hear " + (i < 12 ? "a" + (i == 7 ? "n " : " ") + s[i + 1].ToLower() + " " + s[i + 12] + "ing in my ear.\n\n" : "children...\n\n..."));
            if (i < 12) s[1] += s[i + 11] + "ing like a" + (i == 8 ? "n " : " ") + s[i].ToLower() + (i < 11 ? ",\n" : "...\nthat's what I hear.\n");
        }
        Console.Write(s[0] + s[1]);
        Console.ReadKey();
    }
}

EDITAR: Gracias por sus numerosos e impresionantes consejos, me ayudaron mucho y trataré de que los otros funcionen también.


1
Elimine todos los espacios en blanco innecesarios, puede usar new[]en su lugar o. new string[]También puede convertir esto en una función anónima como en la respuesta de @ aloisdg
TheLethalCoder

Bienvenido a PPCG! Buena idea en esta respuesta! Puede encontrar algo de inspiración para mejorarlo en los consejos para golf de código en la página C # . ¡Sigue adelante!
aloisdg dice Reinstate Monica

1
Caíste en la a elephanttrampa (yo también lo hice). Lo es an elephant;)
aloisdg dice Reinstate Monica

Saque sus "ing" en la matriz de verbos y muévalos a la salida para obtener más ahorros.
GuitarPicker

3

Lote, 650 647 bytes

@echo off
set e=echo(
set s=shift
call:d a "polar bear" ...growl "Polar Bear" a lion roar Lion a hippopotamus snort Hippopotamus a flamingo flut Flamingo a zebra bray Zebra a "boa constrictor" hiss "Boa Constrictor" an elephant trumpet Elephant a leopard snarl Leopard a peacock yelp Peacock a walrus bellow
exit/b
:d
call:v %* Walrus a zookeeper whistl Zookeeper
%e%I hear children...
%e%
:l
%e%%3ing like %1 %~2,
%s%
%s%
%s%
%s%
if not "%5"=="" goto l
%e%%3ing like a %2...
%e%that's what I hear.
exit/b
:v
%e%%~4, %~4, what do you hear?
if "%5"=="" exit/b
%e%I hear %5 %~6 %7ing in my ear.
%e%
%s%
%s%
%s%
%s%
goto v

Porque %*es lo más cercano que tiene Batch a una matriz. Si puedo usar Polar beary Boa constrictorluego 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 offcompleto.


2

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. Entonces

echo "tail -n+2 \$0|zcat;exit" > go.sh
gzip a ;
cat a.gz >> go.sh
chomod u+x go.sh

El archivo así creado cuando se ejecuta devuelve el texto inicial, 402 Bytes.


¿Puedes publicar el código real? 402 bytes no es que gran parte (es decir, puedes publicarla.)
Erik el Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ El código solo es tail -n+2 \$0|zcat;exitseguido 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 ++).
Hastur

Parece que usa coreutils ( 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 el
voto negativo

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ zcatno es de coreutils, viene con gzip. En muchos sistemas hay un script que llama gzip -cd "$@"... Por cierto, modifiqué en Bash + zcat, 402 bytes.
Hastur

Bien, se eliminó el voto negativo. El voto es mío.
Erik the Outgolfer

2

F #, 591 589 579 576 573 567 552 bytes

Este 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)

let A="Polar Bear,Lion,Hippopotamus,Flamingo,Zebra,Boa Constrictor,Elephant,Leopard,Peacock,Walrus,Zookeeper".Split(',')
let S="growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl".Split(',')
let a(s:string)=(if s.[0]='E'then"an "else"a ")+s.ToLower()
let f i=sprintf"%s, %s, what do you hear?\nI hear "A.[i]A.[i]
for i in 0..9 do printfn"%s%s %sing in my ear.\n"(f i)(a A.[i+1])S.[i+1]
printf"%schildren...\n\n..."(f 10)
let t i=sprintf"%sing like %s"S.[i](a A.[i])
Seq.iter(t>>printfn"%s,")[0..8]
printfn"%s...\nthat's what I hear."(t 9)

3
Bienvenido a PPCG, buena respuesta!
gato

Sé que #F es un lenguaje .net, pero creo que a los efectos de este desafío puede reemplazar el "\ r \ n" con un simple "\ n", ya que el concepto es el mismo y ahorra bytes
Vale

@Vale gracias. guardado 10 bytes
asibahi

1
No afecta el conteo, pero has escrito mal "Hippopotamus".
GentlePurpleRain

@GentlePurpleRain Heh. Pensé que buscaba todas las ortografías. Yo lo arreglare.
asibahi

1

Emacs Lisp, 576 (621) bytes

(let*((a'("polar bear""lion""hippopotamus""flamingo""zebra""boa constrictor""elephant""leopard""peacock""walrus""zookeeper"))(l(length a))(m(- l 1))(s'("growl""roar""snort""flut""bray""hiss""trumpet""snarl""yelp""bellow""whistl")))(dotimes(i l)(message"%s, what do you hear?"(let((a(capitalize(nth i a))))(concat a", "a)))(if(not(eq i m))(message "I hear a %s %sing in my ear.\n"(nth(1+ i)a)(nth(1+ i)s))(message"I hear children...\n")(dotimes(j m)(message(concat(when(eq j 0)"...")"%sing like a %s"(if(eq(1+ j)m)"..."","))(nth j s)(nth j a)))(message"That's what I hear."))))

Al arreglar "un elefante", lleva un poco más de tiempo:

(let*((a'("polar bear""lion""hippopotamus""flamingo""zebra""boa constrictor""elephant""leopard""peacock""walrus""zookeeper"))(l(length a))(m(- l 1))(s'("growl""roar""snort""flut""bray""hiss""trumpet""snarl""yelp""bellow""whistl")))(dotimes(i l)(message"%s, what do you hear?"(let((a(capitalize(nth i a))))(concat a", "a)))(if(not(eq i m))(message "I hear a %s %sing in my ear.\n"(nth(1+ i)a)(nth(1+ i)s))(message"I hear children...\n")(dotimes(j m)(message(concat(when(eq j 0)"...")"%sing like a"(and(string-match-p"^[aeiou]"(nth j a))"n")" %s"(if(eq(1+ j)m)"..."","))(nth j s)(nth j a)))(message"That's what I hear."))))

Sin golf:

(let* ((animals '("polar bear"
                  "lion"
                  "hippopotamus"
                  "flamingo"
                  "zebra"
                  "boa constrictor"
                  "elephant"
                  "leopard"
                  "peacock"
                  "walrus"
                  "zookeeper"))
       (l (length animals))
       (m(- l 1))
       (sounds '("growl"
                 "roar"
                 "snort"
                 "flut"
                 "bray"
                 "hiss"
                 "trumpet"
                 "snarl"
                 "yelp"
                 "bellow"
                 "whistl")))
  (dotimes (i l)
    (message "%s, what do you hear?"
             (let ((animal (capitalize (nth i animals))))
               (concat animal ", " animal)))
    (if (not (eq i m))
        (message "I hear a %s %sing in my ear.\n"
                 (nth (1+ i) animals)
                 (nth (1+ i) sounds))
      (message "I hear children...\n")
      (dotimes (j m)
        (message
         (concat
          (when (eq j 0) "...")
          "%sing like a"
          (and (string-match-p"^[aeiou]" (nth j animals)) "n")
          " %s"
          (if (eq (1+ j) m) "..." ","))
         (nth j sounds )
         (nth j animals)))
      (message"That's what I hear."))))

Su expresión regular podría acortarse de ^[aeiou]a ^e, ¿no?
owacoder

Para el elefante sí, pero si se agregaran otros animales, tendría que cambiar. Con 600 bytes ya, 6 bytes no duelen tanto.
Lord Yuuma

1

C, 596 bytes

Llama f()sin ningún argumento. Este no es el mejor golf del mundo, probablemente pueda reducirlo más.

f(n){char*t,a[99][99]={"Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper","growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"};for(n=0;n<11;){strcpy(t=a[n+30],n^6?" ":"n ");strcat(t,a[n++]);for(;*t=tolower(*t);++t);}for(n=0;printf("%s, %s, what do you hear?\n",a[n],a[n]),n<10;++n)printf("I hear a%s %sing in my ear.\n\n",a[n+31],a[12+n]);puts("I hear children...\n");for(n=11;n<21;++n)printf("%s%sing like a%s%s\n",n^11?"":"...",a[n],a[n+19],n^20?",":"...");puts("that's what I hear.");}

Pruébalo con ideone.


¿Puedes agregar un enlace a ideone?
aloisdg dice Reinstate Monica

2
Enlace ideone agregado.
owacoder

a[99][99]-> **a(-6). No puede llamar f()sin argumentos aquí, necesita un n. Reemplazar f(n){con f{n;. Otro -1 aquí. Además, f()ahora es invocable.
Erik the Outgolfer

@owacoder ¿Cómo es que? **asignifica 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.
Erik the Outgolfer

@owacoder ¡No! ¡Hace una matriz que se adapta a 98 cuerdas de longitud 98! Y definitivamente no debe llamar a su enlace ideone "¡Pruébelo en línea!" Para jugar al golf, reemplace a[99][99]con a[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1].
Erik the Outgolfer

1

Python 3, 442 441 bytes

h=t=''
for n,s in zip('polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper'.split(','),'...growl roar snort flut bray hiss trumpet snarl yelp bellow whistl'.split()):u='n'[:'el'in n],n,s,n.title();h+="I hear a{0} {1} {2}ing in my ear.\n\n{3}, {3} what do you hear?\n".format(*u);t+="{2}ing like a{0} {1},\n".format(*u)
print((h+'I hear children...\n\n'+t)[44:-30]+"...\nthat's what I hear.")

sin golf:

animals = 'polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper'.split(',')

sounds = '...growl roar snort flut bray hiss trumpet snarl yelp bellow whistl'.split()

h=t=''
for n,s in zip(animals,sounds):
    u='n'[:'el'in n], n, s, n.title()

    h+="I hear a{0} {1} {2}ing in my ear.\n\n{3}, {3} what do you hear?\n".format(*u)

    t+="{2}ing like a{0} {1},\n".format(*u)

print((h+'I hear children...\n\n'+t)[44:-30]+"...\nthat's what I hear.")

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".


1

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,46declaración al principio.

READ a$,v$
FOR x=0 TO 10
?a$+", "+a$+", what do you hear?"
IF x>9THEN
?"I hear children...":?:?"...";
RESTORE
FOR y=0 TO 9
READ a$,v$
?v$+"ing like ";
CALL j(a$)
IF y<9THEN?", "ELSE?"...":?"that's what I hear."
NEXT
END
ELSE
READ a$,v$
?"I hear ";
CALL j(a$)
?" "+v$+"ing in my ear."
?
END IF
NEXT
DATA"Polar Bear","growl","Lion","roar","Hippopotamus","snort","Flamingo","flut","Zebra","bray","Boa Constrictor","hiss","Elephant","trumpet","Leopard","snarl","Peacock","yelp","Walrus","bellow","Zookeper","whistl"
SUB j (A$)
?"a";
IF LEFT$(A$,1)="E"THEN?"n";
?" "+LCASE$(A$);
END SUB

1
Sé que esto es un poco tarde, pero: creo que puedes guardar algunos bytes usando GOSUB/ en RETURNlugar de CALL/ SUB/ END SUB. Además, puede colocar las comillas DATApara todas las entradas que no tienen espacios en ellas. Finalmente, dado que solo hay un animal que comienza con una vocal, en A$="Elephant"realidad es 1 byte más corto que LEFT$(A$,1)="E". Buen uso de RESTORE, por cierto!
DLosc

1

LUA 535 bytes

p=print a="growl.roar.snort.flut.bray.hiss.trumpet.snarl.yelp.bellow.whist"b="polar bear.lion.hippopotamus.flamingo.zebra.boa constrictor.elephant.leopard.peacock.walrus.zookeeper."z=a.gmatch(a,"%P+")x=b.gmatch(b,"%P+")w=''for j=1,11 do i=x()v=z()e=j==7 and'n 'or' 'p(j==1 and''or'I hear a'..e..i..' '..v..'ing in my ear.\n')w=w..(j>10 and''or v..'ing like a'..e..i..(j>9 and'...'or',')..'\n')y=i:gsub("^%l",a.upper):gsub("%s%l",a.upper)p(y..', '..y..' what do you hear?')end p('I hear children...\n')p('...'..w.."that's what I hear.")

sin golf:

sound_list = "growl.roar.snort.flut.bray.hiss.trumpet.snarl.yelp.bellow.whist"
animal_list = "polar bear.lion.hippopotamus.flamingo.zebra.boa constrictor.elephant.leopard.peacock.walrus.zookeeper."

sound_it = string.gmatch(sound_list, "%P+")
animal_it = string.gmatch(animal_list, "%P+")
part_2 = ''

for i = 1, 11  do
    animal = animal_it()
    sound = sound_it()
    aORan = i == 7 and 'n ' or ' '

    print(i == 1 and '' or 'I hear a'..aORan..animal..' '..sound..'ing in my ear.\n')

    part_2 = part_2..(i > 10 and '' or sound..'ling like a'..aORan..animal..(i > 9 and '...' or ',')..'\n')

    big_animal = animal:gsub("^%l", string.upper):gsub("%s%l", string.upper)
    print(big_animal..', '..big_animal..' what do you hear?')
end

print('I hear children...\n')
print('...'..part_2.."that's what I hear.")

Pruébalo en línea


1

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 )

0000000: 3c3f 3d67 7a69 6e66 6c61 7465 2827 7d53  <?=gzinflate('}S
0000010: c16a 8430 10bd e72b e6d6 cbe0 2f14 b6b4  .j.0...+..../...
0000020: b4d0 c3de 0abd 8d6e baca c64c 1823 62bf  .......n...L.#b.
0000030: be51 3354 1472 58f3 76de f864 e6bd 5cd9  .Q3T.rX.v..d..\.
0000040: 91c0 c592 20ec f1d4 5284 1bc3 cc23 b4a9  .... ...R....#..
0000050: f26c 3ed6 1308 5cc7 1e84 493a 7f87 ce43  .l>...\...I:...C
0000060: 3f43 222a 633e 1381 b03d 0bef b75d 081c  ?C"*c>...=...]..
0000070: 3852 3f0e 3078 9678 147a df75 20ec ff15  8R?.0x.x.z.u ...
0000080: 857f 1cf5 498a 1318 4f9a 6f99 4450 54d4  ....I...O.o.DPT.
0000090: fab5 b510 a4df 7c14 fa5e 1884 7c14 246a  ......|..^..|.$j
00000a0: 2668 d80f 51ba 26b2 a4b9 87e1 2876 6182  &h..Q.&.....(va.
00000b0: 97ff 1e84 63a1 f001 0fd6 d9d0 928f 1065  ....c..........e
00000c0: ec83 3dcd fc9a 7904 4565 632d 0792 5bf2  ..=...y.Eec-..[.
00000d0: 84c4 9dcc dd48 0405 25a5 60a9 e1e6 01b3  .....H..%.`.....
00000e0: 75e1 2874 dd38 0405 25a1 899c a494 d4d6  u.(t.8..%.......
00000f0: 399e 8e4a 5f2b 89a0 67c9 4ee6 87b5 c10a  9..J_+..g.N.....
0000100: 4cc9 86e8 4ea6 2a8f a0b0 b4fb a6ed dc4d  L...N.*........M
0000110: acaf aaf4 6e7a dc85 a755 d375 0fbb ccbf  ....nz...U.u....
0000120: dea4 3ab5 a211 2651 2adf 1e34 1a7b adb6  ..:...&Q*..4.{..
0000130: fb8c 1bcd 6f26 35d7 6896 3c2a a121 45a3  ....o&5.h.<*.!E.
0000140: c1ca d543 eed0 683a b465 971c 34d9 6ca5  ...C..h:.e..4.l.
0000150: 3404 68d4 3b1d 29bb 65b2 17ca a847 cb2a  4.h.;.).e....G.*
0000160: 624b f169 d8d6 b66d aa32 7f27 293b       bK.i...m.2.');

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.


1

Japt , 308 303 299 295 288 280 294 289 286 bytes

Contiene un montón de no imprimibles; siga el enlace a continuación para verlos.

`Pol BÁLiyHippopotam«yFlaÚÁoyZeßBoa CÆqÎtyE¤pÊCyLeopÂýPea¬ckyWalr«yZookeep`qy
`gwÓ2ÂüÍdfl©dßdÊdtruÛFdsnÓ)lpdÞ)owdØtl`qd
[¡[X',SX`, Ø º y Ê#?
I Ê# `Y<A?[Y¶5?``:'aSUg°Y v SVgY `g  my e.`R]¬:[`å,Á`Q='.³R²QU¯J £[Vv `g ¦ke `Y¶6?``:'aSXv]¬Ãq`,
` QR`È  's Ø I Ê#.`]¬]¬Ã·]¬

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.


1

Powershell 921 889 886 898 Bytes

no es perfecto, pero ahorra 300 bytes :)

EDITAR: Gracias Jonathan Frech, guardé 32 Bytes. Y gracias Veskah por corregir la Salida.

filter Z($1,$2){while($1){$x,$1=$1
$y,$2=$2
[tuple]::Create($x,$y)}}
$0="ing"
$$="hear"
$1="I $$ a "
$3='in my ear.'
$a='Polar Bear'
$b='Lion'
$c='Hippopotamus'
$d='Flamingo'
$e='Zebra'
$f='Boa Constrictor'
$g='Elephant'
$h='Leopard'
$i='Peacock'
$j='Walrus'
$k='Zookeeper'
$v="children"
$2="roar$0"
$4="snort$0"
$5="flut$0"
$6="bray$0"
$7="hiss$0"
$8="trumpet$0"
$9="snarl$0"
$x="yelp$0"
$y="bellow$0"
$^="whistl$0"
$l="$1$b $2$3"
$m="$1$c $4$3"
$n="$1$d $5$3"
$o="$1$e $6$3"
$p="$1$f $7$3"
$q="I $$ an $g $8$3"
$r="$1$h $9$3"
$s="$1$i $x$3"
$t="$1$j $y$3"
$u="$1$k $^$3"
$z=' like a '
$w="I $$ $v..."
z $a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k $l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$w|%{"$($_.item1),"*2+"what do you $$?";$_.item2;""}
"...growl$0$z$a,"
z $b,$c,$d,$e,$f $2,$4,$5,$6,$7|%{$_.item2+$z+$_.item1+","}
"$8 like an $g,"
z $h,$i $9,$x,$y|%{$_.item2+$z+$_.item1+","}
$y+$z+"Walrus..."
"that's what I $$."

¿No usaría un carácter ASCII estándar de 7 bits en lugar de un öbyte más eficiente?
Jonathan Frech

Además, creo que hay algunos espacios en blanco superfluos en su primera línea, junto con un nombre de función largo.
Jonathan Frech

Gracias por las pistas :)! (Usé el Ö solo porque enseñé que ya usaba todos los signos ASCII utilizables XD)
Add-TheNewOne

El carácter ösolo se representa usando un solo byte en algunas páginas de códigos, UTF-8 requiere dos bytes para este carácter.
Jonathan Frech

Su salida está un poco apagada. La última estrofa repite oso polar, lo que hace que todo sea uno e incluye silbidos que no son necesarios. También le faltan elipses. También escribe. an elephantTambién hay un salto de línea adicional entre las estrofas anteriores que se puede eliminar eliminando "n".
Veskah

0

clojure, 526 bytes

(use 'clojure.string)(let[l lower-case
a(partition 2(split"Polar Bear,...growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,Boa Constrictor,hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl,children,x"#","))b(map(fn[[w x][y e]][(str
w", "w", what do you hear?
I hear a "(l y)" "e"ing in my ear.

")(str x"ing like a "(l w))])a(rest a))r
replace](print(r(str(r(join""(map first b))#".*x.*""I hear children...")(join",
"(butlast(map last b)))"...
that's what I hear.")#"(?i)a(?= e)""an")))

Aquí está mi intento inicial. Me encanta el formato y lo ilegible que es. Espero que las advertencias use 'clojure.stringsean aceptables.

Pruébalo en línea.

Código formateado:

(use 'clojure.string)
(let [animal-sound (partition 2 (split "Polar Bear,...growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,Boa Constrictor,hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl,children,x" #","))
      sentences (map (fn [[animal-1 sound-1] [animal-2 sound-2]]
                       [(str animal-1 ", " animal-1 ", what do you hear?\nI hear a "
                             (lower-case animal-2) " " sound-2 "ing in my ear.\n\n") (str sound-1 "ing like a " (lower-case animal-1))])
                     animal-sound (rest animal-sound))]
  (print (replace (str
                    (replace (join "" (map first sentences)) #".*x.*" "I hear children...")
                    (join ",\n" (butlast (map last sentences)))
                    "...\nthat's what I hear.") #"(?i)a(?= e)" "an")))

0

Java, 571555538 o 516 bytes

String p(){String r="",z="...",b,x;String[]a="Polar Bear!Lion!Hippopotamus!Flamingo!Zebra!Boa Constrictor!Elephant!Leopard!Peacock!Walrus!Zookeeper!growling!roaring!snorting!fluting!braying!hissing!trumpeting!snarling!yelping!bellowing!whistling".split("!");for(int i=1;i<11;i++){b=i==6?"n ":" ";x=a[i-1];z+=a[i+10]+" like a"+b+x+(i==10?"...":"\n");r+=x+" , "+x+", what do you hear?\n I hear a"+b+a[i].toLowerCase()+" "+a[i+11]+" in my ear.\n\n";}r+=a[10]+" what do you hear?\n\tI hear children...\n"+z+"\nthat's what I hear.";return r;}

Pero solo se requieren 516 bytes para obtener resultados en JShell

String r="",z="...",b,x;String[]a="Polar Bear!Lion!Hippopotamus!Flamingo!Zebra!Boa Constrictor!Elephant!Leopard!Peacock!Walrus!Zookeeper!growling!roaring!snorting!fluting!braying!hissing!trumpeting!snarling!yelping!bellowing!whistling".split("!");for(int i=1;i<11;i++){b=i==6?"n ":" ";x=a[i-1];z+=a[i+10]+" like a"+b+x+(i==10?"...":"\n");r+=x+" , "+x+", what do you hear?\n I hear a"+b+a[i].toLowerCase()+" "+a[i+11]+" in my ear.\n\n";}r+=a[10]+" what do you hear?\n\tI hear children...\n"+z+"\nthat's what I hear."

Es dar salida incorrecta con respecto a los espacios, tabulaciones y minúsculas anvs a.. Me he fijado y golfed a 507 bytes
Kevin Cruijssen

@KevinCruijssen a su código le falta el "ing" de "Escucho un ... ... ** ** en mi oído". Además, es muy probable golfable comenzando icon 0hasta 10cambiar b=a[i-1]con b=a[i++]y eliminar el incremento de donde se encuentra actualmente.
Olivier Grégoire

0

Swift2, 519 bytes

var a=["Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Warlus","Zookeeper"],b=["...growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"].map{"\($0)ing"},c=a.enumerate().map{"\($0.0==6 ?"an":"a") \($0.1)".lowercaseString},i=0,j=0
while i<11{print("\(a[i]), \(a[i++]), what do you hear?\nI hear \(i>10 ?"children...":"\(c[i]) \(b[i]) in my ear")\n")}
while j<10{print("\(b[j]) like \(c[j++])\(j>9 ?"...\nthat's what I hear.":",")")}

0

Haskell 537 499 497 Bytes

import Data.Char
a&b=a++b
b=putStr
c=concat
d=init
e('E':s)="an e"&s
e s="a "&map toLower s
f="I hear "
l=zip(lines"Polar Bear\nLion\nHippopotamus\nFlamingo\nZebra\nBoa Constrictor\nElephant\nLeopard\nPeacock\nWalrus\nZookeeper")$words"growl roar snort flut bray hiss trumpet snarl yelp bellow whistl"
main=(b.drop 41.c)[f&e n&" "&v&"ing in my ear.\n\n"&n&", "&n&", what do you hear?\n"|(n,v)<-l]>>b(f&"children...\n\n..."&(d.d.c)[v&"ing like "&e n&",\n"|(n,v)<-d l]&"...\nthat's what I hear.\n")

Usando 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:

import Data.Char
a&b=a++b
c=concat
d=init
e('E':s)="an e"&s
e s="a "&map toLower s
f="I hear "
l=zip(lines"Polar Bear\nLion\nHippopotamus\nFlamingo\nZebra\nBoa Constrictor\nElephant\nLeopard\nPeacock\nWalrus\nZookeeper")$words"growl roar snort flut bray hiss trumpet snarl yelp bellow whistl"
g=(drop 41.c)[f&e n&" "&v&"ing in my ear.\n\n"&n&", "&n&", what do you hear?\n"|(n,v)<-l]&f&"children...\n\n..."&(d.d.c)[v&"ing like "&e n&",\n"|(n,v)<-d l]&"...\nthat's what I hear.\n"

0

C (clang) , 552 bytes

(*P)()=printf;l(char*s){for(;*s;s++)putchar(*s>64?*s|32:*s);}char*a[]={"Zookeeper","Walrus","Peacock","Leopard","Elephant","Boa Constrictor","Zebra","Flamingo","Hippopotamus","Lion","Polar Bear"},*s[]={"whistl","bellow","yelp","snarl","trumpet","hiss","bray","flut","snort","roar","growl"};f(i){for(i=11;i--;)P("%s, %s, what do you hear?\nI hear%s ",a[i],a[i],i?i^5?" a":" an":""),i?l(a[i-1]):0,P(i?" %sing in my ear.\n\n":"children...\n\n...",s[i-1]);for(i=11;--i;)P("%sing like a%s ",s[i],i^4?"":"n"),l(a[i]),P(i-1?",\n":"...\nthat's what I hear.");}

Pruébalo en línea!



0

Perl 5 , 413 bytes

@t=('Polar Bear',growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,'Boa Constrictor',hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl);say$_=$t[$i],", $_, what do you hear?
I hear ",/Zo/?"children...
":"a".n x(/C/).lc" $t[$i+=2] $t[$i+1]ing in my ear.
"while!/Zo/;pop@t;pop@t;print'...';say+(shift@t)."ing like a ".lc.(@t?",":'...')while$_=shift@t;say"that's what I hear."

Pruébalo en línea!


0

JavaScript, 424 bytes

f=(x=0,a=btoa`>Z¯ ^j¼Ëó*i¢-jk¬ÌYZ)à£6^n¶³²
춸¶óW©©íÌ·¨¥ªÝÌ÷r$Íf¥®ë3f$yê^¯0`[s=`split`]`y`.join` `[s]`z`,g=z=>n[z]+`ing like `+h(17)+l(z)+(z>9?`...
that's what I hear.`:`,
`+g(++z)),h=m=>++x%m?`a `:`an `,l=y=>a[y].toLowerCase(n=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!ËeÌ`[s]`z`))=>a[x]+`, ${a[x]}, what do you hear?
I hear `+(x>9?`children...

...`+g(0):h(6)+l(x)+` ${n[x]}ing in my ear.

`+f(x))

Pruébalo


0

Pyth, 342 bytes

L:b"a e""an e"y>sm.F"
I hear a {1} {0} in my ear.

{2}, {2}, what do you hear?"+dr3edJC,+R"ing"c"growl
roar
snort
flut
bray
hiss
trumpet
snarl
yelp
bellow
whistl"bc"polar bear
lion
hippopotamus
flamingo
zebra
boa constrictor
elephant
leopard
peacock
walrus
zookeeper"b42"I hear children...
"jPPysm+j" like a "d",
"PJc2*6\."that's what I hear.

Pruébelo en línea aquí .

Explicación a seguir.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.