Urso polar, urso polar, o que você ouve?

50

O texto do livro infantil Urso Polar, Urso Polar, O que você ouve? tem um padrão muito simples. Você pode usar o texto para ensinar conceitos de programação introdutórios.

Meu filho ficou rapidamente entediado com essa idéia, então decidi jogar golfe com ela.

O desafio

Na sua linguagem de programação preferida, escreva o menor programa possível que imprimirá o texto a seguir. A saída deve corresponder exatamente, incluindo maiúsculas e minúsculas, espaçamento e pontuação.

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.
aaaantoína
fonte
6
Kolmogorov-complexidade seria uma boa tag para este
charredgrass
3
São maiúsculas Be estão Cdentro Polar Beare são Boa Constrictornecessárias? (Em Batch isso custa-me 10% da minha contagem de bytes ...)
Neil
É permitido enviar um hash e forçar a solução brutalmente com um conjunto restrito? : D
polym
4
Este é um primeiro desafio muito bom!
21716 Alex A.
11
Eu teria +1, mas você tem 42 votos positivos e quem sou eu para perturbar os caminhos da galáxia?
FantaC 14/0218

Respostas:

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—«.“?

Experimente online

Explicação

•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Corda embalada contendo os sons GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL

35B0¡…ing«lV
Descompacte, divida em 0, adicione "ing" a cada palavra, converta para menor e armazene na variável Y

•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
Corda embalada contendo os animais POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER

36B1ð:0¡™
Descompacte, substitua 1 pelo espaço, divida em 0 e converta em maiúscula

D©„, «D‚ø
Duplique, salve para registrar-se para uso posterior, adicione "," a uma cópia, duplique e zip.

“€À€·€î—«?“¶«¸
As palavras do dicionário "o que você ouve?", Seguidas por uma nova linha, adicionada a uma nova lista

‘€JU
O produto cartesiano da lista de "Animal, Animal" e "o que você ouve? \ N", achatou e juntou-se e o armazena na variável X. Pruduz a lista de cadeias de caracteres da forma "Animal, Animal, o que você ouve? N "

¦“„¾“‚˜l
Pegue a lista restante de animais de antes, remova o tratador e adicione crianças, converta para minúsculas.

v
Para cada animal:

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

Pressione "Eu ouço 0 no meu ouvido.", Divida em 0 e pressione como strings separadas.

yð«Y¦õ‚˜Nè«
Pressione "som animal" com crianças sem som

sr„ a
Pressione "a" no lugar correto

N5Qi'n«}
Se o animal for "Elefante", adicione "n"

ð«
Adicione espaço.

N9›ijrj¨ðs«…...«}
Se animal for criança, remova o espaço e adicione "..."

srJˆ}
Junte-se à frase "Eu ouço um (n) som de animal no meu ouvido". (assim como os filhos), armazene na matriz global e no loop final

X¯‚ø€J
Recupere as primeiras linhas, feche e junte-se para produzir a primeira parte da rima "Animal, Animal, o que você ouve? \ NEu ouço um (n) som de animal no meu ouvido."

vy,¶?}
Imprimir seguido de nova linha.

…...DU?
Imprima "..." e armazene uma cópia na variável X.

Y¨v
Para cada som, exceto "assobio":

N__i ', ¶} Para cada linha, exceto a primeira, inicie-a com ", \ n" (fazendo com que a vírgula continue na linha anterior)

yð“€è€…“
Empurre som, espaço e "como um"

N6Qi'n«}
Se o elefante adicionar "n".

ð®NèJl?}X,
Recupere o animal salvo no registro, junte-se a tudo, imprima e finalize o loop seguido de "...". Isso produz o "som como um animal (n)", linhas.

“€Š's€À I—«.“?
Imprima a string do dicionário "é isso que eu ouço".

Emigna
fonte
30
Este está convocando Cthulhu.
aloisdg diz Reinstate Monica
6
Não consigo ver onde o código termina e os dados compactados começam.
Adám 19/07/19
4
@ Adám eu sei. Parece muito sem sentido :) Adicionarei uma explicação eventualmente que, com sorte, ficará mais clara. Talvez eu queira tentar jogar golfe um pouco mais antes.
Emigna
28
Provavelmente é assim que os leigos imaginam o código.
#
11
Eu não tenho idéia o que eu acabei de ler ...
Nico
9

PHP, 420 414 434 414 412 bytes

ligue da CLI ou adicione-o <pre>à saída.

$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.";
  • alguns avisos para constantes indefinidas; Conversão implícita do PHP para string literal entra novamente em ação
  • adicionar o "n" para "um elefante" levou 20 bytes ... hmpf.
  • recuperei os 20 bytes reordenando coisas :)

demolir

$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.";
Titus
fonte
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)

Um desafio bastante divertido!

Obrigado Downgoat por me salvar 27 toneladas de bytes usando atob, e Titus por 4 bytes!

Ungolfed:

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);
charredgrass
fonte
a.map((n,m)=>n>9||(p+=s[n]...))
Neil
11
@ OldBunny2800 Para fins de golfe, você pode definir variáveis ​​globais. (Não faça isso em uma função recursiva embora!)
Neil
11
Seu código não funciona, presumo que a pilha tenha trocado algumas letras em seu código base64. Após a divisão, recebo ["ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q", "", "abaixo", "why2U ="].
lolesque 19/07/2016
11
Defina c=console.log;no início e use c () para salvar 6 bytes. Ou simplesmente salve a string em uma variável e imprima-a uma vez com alert ().
lolesque 19/07/2016
11
@lolesque A c=console.lognão funciona porque logtem de ter um thisdos consoleou ela produz um erro. (? A menos que isso não acontece em alguns navegadores / ambientes) A idéia de colocar tudo isso em um sons de cordas bom, embora
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:.

Experimente online!

608 bytes a menos que a mensagem real (1120), isso é menos da metade (560)!

Erik, o Outgolfer
fonte
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 a leitura: ⎕UCS¯2(219⌶)¯128+⎕UCS'...'

⎕UCS '... 'converter string em pontos de código Unicode

¯128+ subtraia 128 para obter -128 ≤ n ≤ 127

¯2(219⌶) un-zlib

⎕UCS converter pontos de código Unicode em string

A cadeia de origem são os seguintes 365 bytes de pontos 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
Adão
fonte
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.")

(O crédito por 13 bytes salvos deve ser enviado para Gábor Fekete e outros 4 bytes foram salvos por Taylor Lopez.)

Então você provavelmente poderia adivinhar que eu usaria uma linguagem como Python como ferramenta de ensino. Este foi o programa antes de eu começar a jogar.

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.")
aaaantoína
fonte
2
Você pode usar a sintaxe de descompactação para salvar alguns bytes: mude a=A[i]para a,b=A[i]e então você pode escrever ae em bvez de a[0]e a[1]. Isso economizará 12 bytes.
Gábor Fekete
Mudar N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()para N=lambda m:"an"[:("E"==m[0])+1]e n=a[0]+", ";P(n+n+"what do you hear?")para a+=", ";P(a+a+"what do you hear?")economizará mais 2 bytes.
Gábor Fekete
Pergunta geral sobre golfe. Onde você está len(A), já que o objetivo desse desafio é simplesmente gerar a saída estática (não lidar com a entrada dinâmica), é aceitável usar um código 11embutido para salvar bytes?
Taylor Lopez
11
@TaylorLopez com certeza, é uma prática ruim em geral, mas para o golfe, onde o objetivo é minimizar o código, não vejo razão para isso.
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"

Experimente aqui - permalink

KoreanwGlasses
fonte
Você pode jogar fora os ings? Eu fico louco vendo o PHP vencer o Pyth.
Titus
11
O código é gerado a elephant.
Antti29
Todos os problemas (incluindo o fato de o PHP vencer o Pyth) foram corrigidos!
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 onde a saída é a string.

Explicação

  1. Init tcomo uma string com o formato noise,animal,noise,animal,...e dividido por ,.
  2. Declarar re s. ré a primeira parte da música e sa última parte. ze nestá aqui para lidar Elephant.
  3. Ande te construa re sno mesmo loop. Ternário estranho + material interpolado.
  4. Retorne a primeira parte da música, seguida pela ú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;
};

Experimente online!

aloisdg diz Restabelecer Monica
fonte
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)])
Cowabunghole
fonte
3

R 518 509 482 477 474 465 452 456 bytes

Link para o R-Fiddle para experimentar o 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 childrenfora do vector a, e se livrou de entrada correspondente no dvector para salvar 8 bytes
  • Mais arrumação e remoção de subscritos tornados redundantes ao mover children, economizou mais 27 bytes.
  • Globalizou a tolowerfunção, salvou 5 bytes
  • Substitua writeLinespor cate reformate adequadamente (adicionado \nem locais) salvou 3 bytes
  • Percebeu que, se dhouver apenas 7 elementos, e não o 11 completo, R apenas retornará ao início novamente. Como 11 <14, isso funciona para nós. Salvou 9 bytes.
  • subscritos globalizados, salvou 13 bytes.
  • catA função estava se separando de " ", alterada de volta para writeLines. Adicionado 4 bytes ( catpode ser corrigido adicionando ,sep=""à função)
Robert Maidstone
fonte
Bem-vindo ao PPCG! Esta é uma boa primeira resposta. Existe uma maneira de experimentar seu código online?
aloisdg diz Reinstate Monica
11
Tente este r-fiddle.org/#/fiddle?id=5pqkHPyL&version=1 embora eu tive que adicionar um personagem (barra invertida) para obtê-lo para ler o apóstrofo em "que é" corretamente
Robert Maidstone
Obrigado. No R-Fiddle, vi que você tem um ' 'antes de cada item do adepois "Polar Bear". Isso é normal?
aloisdg diz Reinstate Monica
Não tenho muita certeza do que você quer dizer. Você quer dizer o espaço na primeira seção do poema? Como no espaço antes de "Lion" aqui? "Urso polar, urso polar ...... \ nEu ouço um ...... \ n Leão, Leão ..... \ nEu ouço ..." Eu não tinha notado isso antes. Vem da função gato que se separa usando um espaço. Isso pode ser corrigido adicionando sep = "" à função, no entanto, usar writeLines se torna preferível. (Eu mudei o código de volta para writeLines)
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]);}}

Me diverti muito aceitando esse desafio com meu colega! Obrigado pela ideia.

Formatado:

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();
    }
}

EDIT: Obrigado por suas inúmeras e impressionantes dicas, elas ajudaram muito e vou tentar fazer com que as outras funcionem também.

Derpcode
fonte
11
Remova todo o espaço em branco desnecessário; você pode usar new[]o. new string[]Também você pode fazer isso em uma função anônima como em @ aloisdg de resposta
TheLethalCoder
Bem-vindo ao PPCG! Boa ideia nesta resposta! Você pode encontrar alguma inspiração para aprimorá-lo nas dicas de golfe com código na página C # . Continue!
aloisdg diz Reinstate Monica
11
Você caiu na a elephantarmadilha (eu também). É an elephant;)
aloisdg diz Reinstate Monica
Retire seus "ing" s na matriz de verbos e mova-o para a saída para obter mais economia.
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 %*é a coisa mais próxima que o Lote tem de uma matriz. Se eu posso usar Polar beare Boa constrictorentão posso economizar 10% ... mas ainda tenho mais de 50% do texto original ...

Edit: Salvo 3 bytes, definindo e=echo(com um (espaço em vez de um espaço, o que me permite usá-lo para ecoar linhas em branco, embora eu precise escrever @echo offna íntegra.

Neil
fonte
2

Bash + zcat, 402 bytes

Apenas uma piada:
um script bash de 2 linhas que se arrasta e canaliza a segunda linha para o zcat.
A segunda linha é o texto compactado em gzip.

Como prepará-lo: todo o texto em um arquivo a. Então

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

O arquivo criado quando executado retorna o texto inicial, 402 bytes.

Hastur
fonte
Você pode postar o código real? 402 bytes não é que muito (ou seja, você pode publicá-la.)
Erik o Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ O código é tail -n+2 \$0|zcat;exitseguido apenas por uma nova linha e uma sequência binária de 379 bytes (a versão compactada do texto proposto). Você sabia o motivo do voto negativo? (é um procedimento semi-padrão para bash auto-instalar scripts com um arquivo dentro, IMHO não é tão diferente do uso de uma biblioteca em c ++).
Hastur
Parece que você usa coreutils ( zcat), portanto, seu cabeçalho deve ser ( Bash + coreutils, 402 bytes ) em vez de ( Bash (com zcat) 402 ). E você pode editar sua resposta (basta anexar <!>no final de sua postagem)? Eu quero remover
o voto negativo
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ zcatnão é da coreutils, vem com ela gzip. Em muitos sistemas existe um script que chama gzip -cd "$@"... BTW eu modifiquei em Bash + zcat, 402 bytes.
Hastur
Bom, voto negativo removido. O voto positivo é meu.
Erik the Outgolfer
2

F #, 591 589 579 576 573 567 552 bytes

Esta é a minha primeira tentativa no código de golfe com um idioma que eu gosto. Aposto que existem algumas maneiras de diminuir isso. É executado no FSI, portanto, não há necessidade de clichê .NET.

Editar: Raspou 10 bytes removendo \r. Ele ainda é bom no VSCode, então vá entender. Corte outros três bytes com a composição da função e outros três com um lambda e, em seguida, seis com um loop for em vez do Seq.iter (eliminando o lambda). Finalmente, 15 bytes foram cortados 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)
asibahi
fonte
3
Bem-vindo ao PPCG, boa resposta!
cat
Eu sei que #F é um idioma .net, mas acho que, para o objetivo deste desafio, você pode substituir o "\ r \ n" por um simples "\ n", pois o conceito é o mesmo e economiza bytes
Vale
@ Vale muito. salvou 10 bytes
asibahi
11
Não afeta a contagem, mas você digitou "Hipopótamo" errado.
GentlePurpleRain
@GentlePurpleRain Heh. Pensei ter procurado todas as grafias. Eu vou consertar isso.
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."))))

Ao consertar "um elefante", leva um pouco mais de tempo:

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

Ungolfed:

(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."))))
Lord Yuuma
fonte
Seu regex pode ser reduzido de ^[aeiou]para ^e, não é?
19416 owacoder
Para o elefante, sim, mas se outros animais fossem adicionados, seria necessário mudar. Com 600 bytes já, 6 bytes não prejudicam tanto.
Lord Yuuma
1

C, 596 bytes

Ligue f()sem argumentos. Este não é o melhor golfe do mundo, eu provavelmente posso diminuir mais.

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.");}

Experimente em ideone.

owacoder
fonte
Você pode adicionar um link ao ideone?
aloisdg diz Reinstate Monica
2
Adicionado link ideone.
21416 owacoder
a[99][99]-> **a(-6). Você não pode ligar f()sem argumentos aqui, você precisa de um n. Substitua f(n){por f{n;. Outro -1 aqui. Além disso, f()agora é exigível.
Erik the Outgolfer
@owacoder Como é que é? **asignifica uma matriz de matrizes de caracteres (ou um ponteiro de ponteiro de caractere) e, para mim, sempre funcionou (gcc 4.8). Qual compilador você usa? Se você não usa o gcc, deve especificá-lo. Se você usa o gcc, é o padrão.
Erik the Outgolfer
@owacoder Não! Faz uma matriz que cabe 98 cordas de comprimento 98! E você definitivamente não deve chamar seu link ideológico de "Experimente on-line!" Para jogar golfe, substitua a[99][99]por a[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1].
Erik o 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.")

ungolfed:

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

Basicamente, apenas um loop que cria duas strings representando as duas partes da história. A 'n'[:'el'in n]lida com o "um" para elefante. As [44:-30]costeletas "Eu ouço um urso polar rosnando no meu ouvido" e a trilha "assobiando como um tratador".

RootTwo
fonte
1

QB64 (QuickBASIC), 581 bytes

O código se expande um pouco quando você o joga no intérprete, mas esse arquivo de origem é válido para carregar como está. Se você quiser ver toda a saída antes que ela passe, precisará adicionar uma width 80,46instrução ao início.

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
GuitarPicker
fonte
11
Eu sei que isso é meio tarde, mas: acho que você pode salvar alguns bytes usando GOSUB/ em RETURNvez de CALL/ SUB/ END SUB. Além disso, você pode soltar as aspas DATApara todas as entradas que não possuem espaços. Finalmente, como existe apenas um animal que começa com uma vogal, A$="Elephant"na verdade é 1 byte menor que LEFT$(A$,1)="E". Bom uso de RESTORE, BTW!
DLosc
1

Bytes LUA 535

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

ungolfed:

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

Experimente online

CHlM3RA
fonte
1

PHP, 366 bytes

Resposta preguiçosa, mas por que escrever um descompressor personalizado quando o gzip está disponível?

Despejo hexadecimal de código PHP (pode ser salvo com 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.');

Usei algumas iterações do zopfli para converter o texto de origem em 349 bytes de dados compactados, evitando o caractere 'que, caso contrário, precisaria ser escapado com barras invertidas.

1133261
fonte
1

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

Contém um monte de não imprimíveis; siga o link abaixo para visualizá-los.

`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 Ê#.`]¬]¬Ã·]¬

Teste-o

+14 bytes porque eu enrolei a linha da morsa; precisará passar por outro passe na semana que vem para ver se consigo recuperar algum desses bytes.

Shaggy
fonte
1

Powershell 921 889 886 898 Bytes

não é perfeito, mas economiza 300 bytes :)

Edição: Obrigado Jonathan Frech, eu salvei 32 bytes. E obrigado Veskah por corrigir a saída.

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 $$."
Add-TheNewOne
fonte
Usar um caractere ASCII de 7 bits padrão em vez de öser mais eficiente em bytes?
Jonathan Frech 22/02
Além disso, acho que há algum espaço em branco supérfluo em sua primeira linha, junto com um nome de função longo.
Jonathan Frech 22/02
Obrigado pelas dicas :)! (Eu usei o Ö apenas porque ensinei que já usei todos os sinais ASCII utilizáveis ​​XD)
Add-TheNewOne
O caractere öé representado apenas usando um único byte em algumas páginas de código; o UTF-8 requer dois bytes para esse caractere.
Jonathan Frech
Sua saída está um pouco desligada. A última estrofe repete o urso polar, que faz com que tudo desapareça em um e você inclui assobios que não são necessários. Também está faltando elipses. Também escreve: an elephantHá também uma quebra de linha extra entre as estrofes anteriores que podem ser eliminadas removendo o "n".
Veskah 25/02
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")))

Aqui está a minha tentativa inicial. Tem que amar a formatação e como é ilegível. Espero que os avisos use 'clojure.stringsejam aceitáveis.

Experimente online.

Código formatado:

(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")))
Chris F
fonte
0

Java, 571 555 538 ou 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;}

Mas apenas 516 bytes são necessários para obter o resultado no 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."
user902383
fonte
É dar saída incorretas sobre espaços, tabulações minúsculas e anvs a.. Eu fixo e golfed-lo para 507 bytes
Kevin Cruijssen
@KevinCruijssen seu código está faltando o "ing" de "Eu ouço um ... ... ** ing ** no meu ouvido". Além disso, muito provavelmente golfable iniciando icom 0até 10mudar b=a[i-1]com b=a[i++]e remover o incremento, onde é atualmente.
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.":",")")}
Vagner
fonte
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 a convenção de que uma solução não precisa ser executável, apenas produza a saída através de alguma função, isso pode ser reduzido para 479 bytes. A saída está em 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"
user2845840
fonte
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.");}

Experimente online!

gastropner
fonte
537 bytes
ceilingcat 22/02
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."

Experimente online!

Xcali
fonte
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))

Teste-o

Shaggy
fonte
0

Pitão, 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.

Experimente online aqui .

Explicação a seguir.

Sok
fonte