Polar Bear, Polar Bear, qu'entendez-vous?


50

Le texte du livre pour enfants Polar Bear, Polar Bear, qu'entendez-vous? a un motif très simple. Vous pouvez utiliser le texte pour enseigner les concepts d'introduction à la programmation.

Mon fils s’est vite ennuyé de cette idée, alors j’ai décidé de jouer au golf avec.

Le défi

Dans le langage de programmation de votre choix, écrivez le plus petit programme possible qui imprimera le texte suivant. La sortie doit correspondre exactement, y compris la casse, l’espacement et la ponctuation.

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.

6
kolmogorov-complexité serait une bonne étiquette pour cela
charredgrass

3
Sont les majuscules Bet Cdans Polar Bearet Boa Constrictornécessaire? (Dans le lot, cela me coûte 10% de mon nombre d'octets ...)
Neil

Soumettre un hachage et appliquer brutalement la solution avec un ensemble restreint est-il autorisé? : D
polym

4
C'est un très beau premier challenge!
Alex A.

1
Je ferais +1 mais vous êtes à 42 votes positifs, et qui dois-je déranger les voies de la galaxie?
FantaC

Réponses:


34

05AB1E, 349 331 330 322 314 311 octets

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

Essayez-le en ligne

Explication

•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Chaîne emballée contenant les sons GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL

35B0¡…ing«lV
Décompressez, divisez en 0, ajoutez "ing" à chaque mot, convertissez-le en moins et stockez-le dans la variable Y

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

36B1ð:0¡™
Déballer, remplacer 1 par un espace, diviser en 0 et convertir en cas de titre

D©„, «D‚ø
Dupliquer, enregistrer pour vous enregistrer pour une utilisation ultérieure, ajoutez "," à une copie, dupliquez-le et zip.

“€À€·€î—«?“¶«¸
Mots du dictionnaire "qu'entendez-vous?", Suivi d'une nouvelle ligne, ajouté à une nouvelle liste

‘€JU
Produit cartésien de la liste "Animal, Animal" et "qu'entendez-vous? \ N", aplati et joint, et le stocke dans la variable X. Pruduces liste de chaînes de la forme "Animal, Animal, qu'entendez-vous? N ".

¦“„¾“‚˜l
Prenez la liste d'animaux restants d'avant, retirez le gardien de zoo et ajoutez des enfants, convertissez-les en minuscules.

v
Pour chaque animal:

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

Poussez "J'entends0 dans mon oreille.", Divisez en 0 et poussez comme des ficelles séparées

yð«Y¦õ‚˜Nè«
Appuyez sur "son animal" avec les enfants n'ayant pas de son

sr„ a
Poussez "a" au bon endroit

N5Qi'n«}
Si l'animal est "Elephant", ajoutez "n"

ð«
Ajouter de l'espace.

N9›ijrj¨ðs«…...«}
Si l'animal est un enfant, supprimez l'espace et ajoutez "..."

srJˆ}
Joignez la phrase "J'entends un bruit d'animal dans mon oreille". (ainsi que celui des enfants), stocke dans un tableau global et une boucle de fin

X¯‚ø€J
Récupérez les premières lignes, zippez et rejoignez pour produire la première partie de la comptine "Animal, qu'entendez-vous? \ NJ’entends un son de animal dans mon oreille."

vy,¶?}
Imprimer suivi d'une nouvelle ligne.

…...DU?
Imprimer "..." et stocker une copie dans la variable X.

Y¨v
Pour chaque son sauf "sifflement":

N__i ', ¶} Pour chaque ligne sauf la première, démarrez-la par ", \ n" (en faisant passer la virgule à la ligne précédente)

yð“€è€…“
Poussez le son, l'espace et "comme un"

N6Qi'n«}
Si l'éléphant ajoutez "n".

ð®NèJl?}X,
Récupérez l'animal enregistré dans le registre, joignez tout, imprimez et terminez en boucle suivi de "...". Cela produit les lignes "sonner comme un animal (n)".

“€Š's€À I—«.“?
Dictionnaire chaîne d'impression "c'est ce que j'entends."


30
Celui-ci appelle Cthulhu.
aloisdg dit Réintégrer Monica

6
Je ne vois pas où se termine le code et où commencent les données compressées.
Adám

4
@ Adám je sais. Cela ressemble beaucoup à du charabia :) J'ajouterai une explication éventuellement qui le rendra plus clair. Je voudrais peut-être essayer de jouer au golf un peu plus avant.
Emigna

28
C'est probablement ainsi que les profanes imaginent le code.
nozɐɹƆ

1
Je n'ai aucune idée de ce que je viens de lire ...
Nico

9

PHP, 420 414 434 414 412 octets

appel depuis la CLI ou <pre>vers la sortie.

$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.";
  • quelques avis pour des constantes non définies; La conversion implicite de PHP en chaîne littérale reprend son cours
  • l'ajout du "n" pour "un éléphant" a pris 20 octets ... hmpf.
  • récupéré les 20 octets en réorganisant des choses :)

panne

$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 octets

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)

Un défi très amusant!

Merci Downgoat de m'avoir économisé 27 tonnes d'octets atob, et Titus pour 4 octets!

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

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

1
@ OldBunny2800 Aux fins du golf, vous êtes autorisé à définir des variables globales. (Ne faites pas cela dans une fonction récursive cependant!)
Neil

1
Votre code ne fonctionne pas, je suppose que la pile a échangé des lettres dans votre code base64. Après la scission, je reçois ["ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q", "", "ci-dessous", "pourquoi2U ="].
Lolesque

1
Définissez c=console.log;au début puis utilisez c () pour sauvegarder 6 octets. Ou sauvegardez simplement la chaîne dans une variable et imprimez-la une fois avec alert ().
lolesque

1
@lolesque Le c=console.logne fonctionne pas car logdoit avoir un thisof consoleou il génère une erreur. (À moins que cela ne soit pas le cas dans certains navigateurs / environnements?) L'idée de tout mettre dans une chaîne semble bonne, cependant
apsillers

7

/// , 523 512 octets

/_/\/\///:/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:.

Essayez-le en ligne!

608 octets de moins que le message réel (1120), c'est moins de la moitié de celui-ci (560)!


6

Dyalog APL , 387 octets

⎕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­·Õ}ýÚ'

Pour faciliter la lecture: ⎕UCS¯2(219⌶)¯128+⎕UCS'...'

⎕UCS '... 'convertir une chaîne en points de code Unicode

¯128+ soustrayez 128 pour obtenir -128 ≤ n ≤ 127

¯2(219⌶) un-zlib

⎕UCS convertir les points de code Unicode en chaîne

La chaîne source est constituée des 365 octets suivants de points de code Unicode zlibés:

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 octets

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

(Le crédit pour 13 octets sauvegardés devrait aller à Gábor Fekete, et 4 octets supplémentaires ont été sauvegardés par Taylor Lopez.)

Donc, vous pourriez probablement deviner que j'allais utiliser un langage comme Python comme outil d'enseignement. C'était le programme avant que je commence à jouer au 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
Vous pouvez utiliser la syntaxe de décompression pour économiser des octets: changez a=A[i]en a,b=A[i]et vous pouvez écrire aet bau lieu de a[0]et a[1]. Cela permettra d'économiser 12 octets.
Gábor Fekete

Passer N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()à N=lambda m:"an"[:("E"==m[0])+1]et n=a[0]+", ";P(n+n+"what do you hear?")à a+=", ";P(a+a+"what do you hear?")sauvera 2 octets supplémentaires.
Gábor Fekete

Question de golf générale. Où que vous en soyez len(A), puisque le but de ce défi est simplement de générer une sortie statique (et non pas une entrée dynamique), est-il acceptable d’utiliser un code codé en dur à la 11place pour économiser des octets?
Taylor Lopez

1
@TaylorLopez, c’est une mauvaise pratique en général, mais pour le golf où l’objectif est de minimiser le code, je ne vois aucune raison de ne pas le faire.
aaaantoine

5

Pyth - 427 384 octets

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

Essayez-le ici - permalien


Pouvez-vous jouer au golf ing? Je deviens fou de voir PHP battre Pyth.
Titus

1
Les sorties de code a elephant.
Antti29

Tous les problèmes (y compris le fait que PHP bat Pyth) sont résolus!
KoreanwGlasses

3

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

()=>{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 où la sortie est a string.

Explication

  1. Init tcomme une chaîne au format noise,animal,noise,animal,...et divisée par ,.
  2. Déclarer ret s. rest la première partie de la chanson et sla dernière partie. zet nsont ici pour gérer Elephant.
  3. Marcher tet construire ret sdans la même boucle. Trucs bizarres ternaires + interpolés.
  4. Renvoie la première partie de la chanson suivie de la dernière partie.

Code

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

Essayez-le en ligne!


3

Python 2 - 454 octets

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 octets

Lien vers R-Fiddle pour essayer du code

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]))
  • Sorti childrendu vecteur aet débarrassé de l'entrée correspondante dans led vecteur pour économiser 8 octets
  • Plus de rangement et de suppression des indices rendus redondants par le déplacement children, 27 octets sauvegardés.
  • Globalisé la tolowerfonction, sauvegardé 5 octets
  • Remplacer writeLinespar catet reformater correctement (ajouté \npar endroits) sauvegardé 3 octets
  • A réalisé que s'il dn'y a que 7 éléments et non pas les 11, R va simplement revenir au début. Comme 11 <14 alors cela fonctionne pour nous. Enregistré 9 octets.
  • indices globalisés, enregistrés 13 octets.
  • catla fonction se séparait avec " ", puis redevenait writeLines. Ajout de 4 octets ( catpeut être corrigé en ajoutant ,sep=""à la fonction)

Bienvenue chez PPCG! C'est une belle première réponse. Est-il possible d'essayer votre code en ligne?
aloisdg dit: Réintégrer Monica le

1
Essayez ceci r-fiddle.org/#/fiddle?id=5pqkHPyL&version=1 bien que je devais ajouter un caractère (barre oblique inverse) pour le faire lire "c'est" correctement
Robert Maidstone

Je vous remercie. Dans R-Fiddle, j'ai vu que vous aviez un ' 'avant chaque élément aaprès "Polar Bear". Est-ce normal?
aloisdg dit Réintégrer Monica

Je ne suis pas tout à fait sûr de ce que vous voulez dire. Voulez-vous dire l'espace dans la première section du poème? Comme dans l'espace avant "Lion" ici? "Ours polaire, ours polaire ...... \ nJ'entends un ...... \ n Lion, Lion ..... \ n J'entends un ..." Je n'avais pas remarqué cela auparavant. Cela vient de la fonction chat qui sépare en utilisant un espace. Cela peut être corrigé en ajoutant sep = "" à la fonction, cependant, utiliser writeLines devient préférable. (J'ai changé le code pour écrire Lines)
Robert Maidstone

3

C #, 592 572 octets

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

J'ai passé un si bon moment à relever ce défi avec mon collègue! Merci pour l'idée.

Formaté:

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: Merci pour vos conseils nombreux et impressionnants, ils ont beaucoup aidé et je vais essayer de faire en sorte que les autres fonctionnent aussi.


1
Supprimez tous les espaces inutiles, vous pouvez utiliser new[]o. new string[]Vous pouvez aussi en faire une fonction anonyme, comme dans la réponse de @ aloisdg
TheLethalCoder

Bienvenue chez PPCG! Bonne idée dans cette réponse! Vous pouvez trouver de l’inspiration pour l’améliorer dans les astuces pour jouer au code dans la page C # . Continue!
aloisdg dit: Réintégrer Monica le

1
Vous êtes tombé dans le a elephantpiège (moi aussi). C'est an elephant;)
aloisdg dit Réintégrer Monica

Sortez vos "ing" dans le tableau de verbes et déplacez-les vers la sortie pour économiser encore plus.
GuitarPicker

3

Lot, 650 647 octets

@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

Parce que %*c'est la chose la plus proche d'un lot dans un tableau. Si je peux utiliser Polar bearetBoa constrictor puis je peux économiser 10% ... mais je suis toujours plus de 50% du texte original ...

Edit: 3 octets enregistrés en définissant e=echo(avec un au (lieu d'un espace, ce qui me permet de l' utiliser pour faire écho des lignes vides, bien que je puis écrire @echo offen entier.


2

Bash + zcat, 402 octets

Juste une blague:
un script bash de 2 lignes qui se termine et dirige la deuxième ligne vers zcat.
La deuxième ligne est le texte compressé.

Comment le préparer: tout le texte d'un fichier a. ensuite

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

Le fichier ainsi créé à l'exécution renvoie le texte de départ, 402 octets.


Pouvez-vous poster le code actuel? 402 octets ne sont pas que beaucoup (vous pouvez l' afficher.)
Erik le Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Le code n'est tail -n+2 \$0|zcat;exitsuivi que d'une nouvelle ligne et d'une chaîne binaire de 379 octets (version gzippée du texte proposé). Saviez-vous la raison du vote négatif? (c’est une procédure semi-standard pour les scripts auto-installables bash avec une archive, IMHO n’est pas si différente de l’utilisation d’une bibliothèque en c ++).
Hastur

Il semble que vous utilisiez coreutils ( zcat), votre en-tête doit donc être ( Bash + coreutils, 402 octets ) au lieu de ( Bash (avec zcat) 402 ). Et pouvez-vous modifier votre réponse (il suffit de la joindre <!>à la fin de votre message)? Je veux enlever le
vote négatif

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ zcatn'est pas de coreutils, il vient avec gzip. Dans beaucoup de système est un script avec qui appelle gzip -cd "$@"... BTW, j'ai modifié dans Bash + zcat, 402 octets.
Hastur

Bon, le vote négatif a été supprimé. Le vote positif est à moi.
Erik l'Outgolfer

2

F #, 591 589 579 576 573 567 552 octets

Ceci est mon premier essai de code golf avec une langue que j’aime. Je parie qu'il y a des façons de raccourcir cela. Fonctionne en FSI, donc pas besoin de passe-partout .NET.

Edit: Rasé 10 octets en supprimant \r. Il restitue bien en VSCode alors allez comprendre. Coupez trois autres octets avec la composition de la fonction et trois autres avec un lambda, puis six avec une boucle for au lieu de Seq.iter (suppression du lambda). Enfin, 15 octets ont été coupés en réorganisanta(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
Bienvenue sur PPCG, bonne réponse!
chat le

Je sais que #F est une langue .net, mais je pense que pour le but de ce défi, vous pouvez remplacer le "\ r \ n" par un simple "\ n", car le concept est identique et permet de gagner des octets
Vale

@Vale merci. 10 octets enregistrés
asibahi

1
N'affecte pas le compte, mais vous avez mal orthographié "Hippopotame".
GentlePurpleRain le

@GentlePurpleRain Heh. Je pensais avoir cherché toutes les orthographes. Je le réparerai.
Asibahi

1

Emacs Lisp, 576 (621) octets

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

Lorsque vous réparez "un éléphant", cela prend un peu plus longtemps:

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

Votre regex pourrait être raccourci de ^[aeiou]à ^e, n'est-ce pas?
owacoder le

Pour l'éléphant, oui, mais si d'autres animaux étaient ajoutés, il faudrait que cela change. Avec 600 octets déjà, 6 octets ne font pas trop mal.
Lord Yuuma

1

C, 596 octets

Appelez f()sans aucun argument. Ce n'est pas le meilleur golf du monde, je peux probablement le réduire davantage.

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

Essayez sur ideone.


Pouvez-vous ajouter un lien vers ideone?
aloisdg dit: Réintégrer Monica le

2
Ajout du lien ideone.
owacoder le

a[99][99]-> **a(-6). Vous ne pouvez pas appeler f()sans arguments ici, vous avez besoin d’un n. Remplacer f(n){par f{n;. Un autre -1 ici. En outre, f()est maintenant appelable.
Erik l'Outgolfer

@owacoder Comment ça se fait? **asignifie un tableau de tableaux de caractères (ou un pointeur de caractère) et, pour moi, cela a toujours fonctionné (gcc 4.8). Quel compilateur utilisez-vous? Si vous n'utilisez pas gcc, vous devez le spécifier. Si vous utilisez gcc, c'est une valeur par défaut.
Erik the Outgolfer le

@owacoder Non! Cela fait un tableau qui correspond à 98 chaînes de longueur 98! Et vous ne devez absolument pas appeler votre lien idéone "Essayez-le en ligne!" Pour jouer au golf, remplacez a[99][99]par 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 octets

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

Fondamentalement, juste une boucle qui construit deux chaînes représentant les deux parties de l'histoire. Le 'n'[:'el'in n]gère le "un" pour l'éléphant. Les [44:-30]côtelettes au large de la principale «J'entends un ours polaire grogne dans mon oreille » et fuite « en sifflant comme un Zookeeper ».


1

QB64 (QuickBASIC), 581 octets

Le code se développe un peu lorsque vous le lancez dans l'interpréteur, mais ce fichier source est valide pour être chargé tel quel. Si vous voulez voir la totalité de la sortie avant de la faire défiler, vous devez ajouter une width 80,46instruction au début.

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
Je sais que c'est un peu tard, mais: je pense que vous pouvez économiser des octets en utilisant GOSUB/ RETURNau lieu de CALL/ SUB/ END SUB. En outre, vous pouvez supprimer les guillemets DATApour toutes les entrées ne contenant pas d'espaces. Enfin, comme il n'y a qu'un seul animal qui commence par une voyelle, il a en A$="Elephant"fait un octet de moins que LEFT$(A$,1)="E". Belle utilisation de RESTORE, BTW!
DLosc

1

LUA 535 octets

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

Essayez-le en ligne


1

PHP, 366 octets

Réponse lente, mais pourquoi écrire un décompresseur personnalisé lorsque gzip est disponible?

Dex Hex de code PHP (peut être enregistré avec 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.');

J'ai utilisé quelques itérations de zopfli pour convertir le texte source en 349 octets de données compressées, en évitant le caractère 'qui devrait sinon être échappé avec des barres obliques inverses.


1

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

Contient un tas de non imprimables; suivez le lien ci-dessous pour les voir.

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

Essaye-le

+14 octets parce que j'avais collé la ligne de morse; devra faire un autre passage dessus la semaine prochaine pour voir si je peux récupérer un de ces octets.


1

Powershell 921 889 886 898 octets

ce n'est pas parfait, mais cela économise 300 octets :)

EDIT: Merci Jonathan Frech, j'ai économisé 32 octets. Et merci Veskah pour avoir corrigé la sortie.

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

Ne pas utiliser un caractère ASCII standard 7 bits au lieu d'un öoctet plus efficace?
Jonathan Frech

De plus, je pense qu’il existe des espaces superflus dans votre première ligne, ainsi qu’un nom de fonction long.
Jonathan Frech

Merci pour les conseils :)! (J'ai utilisé l'Ö juste parce que j'ai appris à utiliser déjà tous les signes ASCII utilisables XD)
Add-TheNewOne

Le caractère ön'est représenté qu'à l'aide d'un seul octet dans certaines pages de code, UTF-8 nécessite deux octets pour ce caractère.
Jonathan Frech

Votre sortie est un peu éteinte. La dernière strophe reprend l'ours polaire, ce qui élimine tout d'un coup et vous incluez le sifflement qui n'est pas nécessaire. Il manque aussi des ellipses. Il écrit également qu’il an elephantexiste également une rupture de ligne supplémentaire entre les strophes précédentes, qui peut être supprimée en supprimant le "n".
Veska

0

clojure, 526 octets

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

Voici ma tentative initiale. Je dois aimer le formatage et son illisibilité. J'espère que les avertissements de use 'clojure.stringsont acceptables.

Essayez-le en ligne.

Code formaté:

(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, 571 555 538 ou 516 octets

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

Mais seulement 516 octets sont nécessaires pour obtenir un résultat 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."

Il est de donner une sortie incorrecte en ce qui concerne les espaces, les onglets, les minuscules et anvs a.. Je l' ai fixé et golfed à 507 octets
Kevin Cruijssen

@KevinCruijssen, votre code manque le "ing" de "j'entends un ... ... ** ** ** dans mon oreille". En outre, golfable très probablement en commençant iavec 0jusqu'à 10changer b=a[i-1]avec b=a[i++]et en supprimant l'incrément où il est actuellement.
Olivier Grégoire

0

Swift2, 519 octets

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 octets

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

En utilisant la convention selon laquelle une solution n'a pas d'exécutable, produisez uniquement la sortie via une fonction. Cela peut être réduit à 479 octets. La sortie 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 octets

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

Essayez-le en ligne!



0

Perl 5 , 413 octets

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

Essayez-le en ligne!


0

JavaScript, 424 octets

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

Essaye-le


0

Pyth, 342 octets

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.

Essayez-le en ligne ici .

Explication à suivre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.