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.
code-golf
string
kolmogorov-complexity
aaaantoine
la source
la source
B
etC
dansPolar Bear
etBoa Constrictor
nécessaire? (Dans le lot, cela me coûte 10% de mon nombre d'octets ...)Réponses:
05AB1E,
349331330322314311 octetsEssayez-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:
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."
la source
PHP,
420414434414412 octetsappel depuis la CLI ou
<pre>
vers la sortie.panne
la source
JavaScript,
545541497 octetsUn défi très amusant!
Merci Downgoat de m'avoir économisé
27tonnes d'octetsatob
, et Titus pour 4 octets!Ungolfed:
la source
a.map((n,m)=>n>9||(p+=s[n]...))
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 ().c=console.log
ne fonctionne pas carlog
doit avoir unthis
ofconsole
ou 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/// ,
523512 octetsEssayez-le en ligne!
608 octets de moins que le message réel (1120), c'est moins de la moitié de celui-ci (560)!
la source
Dyalog APL , 387 octets
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îneLa chaîne source est constituée des 365 octets suivants de points de code Unicode zlibés:
la source
Python 3,
497484480 octets(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.
la source
a=A[i]
ena,b=A[i]
et vous pouvez écrirea
etb
au lieu dea[0]
eta[1]
. Cela permettra d'économiser 12 octets.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
àN=lambda m:"an"[:("E"==m[0])+1]
etn=a[0]+", ";P(n+n+"what do you hear?")
àa+=", ";P(a+a+"what do you hear?")
sauvera 2 octets supplémentaires.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 à la11
place pour économiser des octets?Pyth -
427384 octetsEssayez-le ici - permalien
la source
ing
? Je deviens fou de voir PHP battre Pyth.a elephant
.C #,
575525520526507504497494493 octetsC # lambda où la sortie est a
string
.Explication
t
comme une chaîne au formatnoise,animal,noise,animal,...
et divisée par,
.r
ets
.r
est la première partie de la chanson ets
la dernière partie.z
etn
sont ici pour gérerElephant
.t
et construirer
ets
dans la même boucle. Trucs bizarres ternaires + interpolés.Code
Essayez-le en ligne!
la source
Python 2 - 454 octets
la source
R
518509482477474465452456 octetsLien vers R-Fiddle pour essayer du code
children
du vecteura
et débarrassé de l'entrée correspondante dans led
vecteur pour économiser 8 octetschildren
, 27 octets sauvegardés.tolower
fonction, sauvegardé 5 octetswriteLines
parcat
et reformater correctement (ajouté\n
par endroits) sauvegardé 3 octetsd
n'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.cat
la fonction se séparait avec" "
, puis redevenaitwriteLines
. Ajout de 4 octets (cat
peut être corrigé en ajoutant,sep=""
à la fonction)la source
' '
avant chaque élémenta
après"Polar Bear"
. Est-ce normal?C #,
592572 octetsJ'ai passé un si bon moment à relever ce défi avec mon collègue! Merci pour l'idée.
Formaté:
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.
la source
new[]
o.new string[]
Vous pouvez aussi en faire une fonction anonyme, comme dans la réponse de @ aloisdga elephant
piège (moi aussi). C'estan elephant
;)Lot,
650647 octetsParce que
%*
c'est la chose la plus proche d'un lot dans un tableau. Si je peux utiliserPolar bear
etBoa 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 off
en entier.la source
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
. ensuiteLe fichier ainsi créé à l'exécution renvoie le texte de départ, 402 octets.
la source
tail -n+2 \$0|zcat;exit
suivi 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 ++).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 lezcat
n'est pas de coreutils, il vient avecgzip
. Dans beaucoup de système est un script avec qui appellegzip -cd "$@"
... BTW, j'ai modifié dans Bash + zcat, 402 octets.F #,
591589579576573567552 octetsCeci 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)
la source
Emacs Lisp, 576 (621) octets
Lorsque vous réparez "un éléphant", cela prend un peu plus longtemps:
Ungolfed:
la source
^[aeiou]
à^e
, n'est-ce pas?C, 596 octets
Appelez
f()
sans aucun argument. Ce n'est pas le meilleur golf du monde, je peux probablement le réduire davantage.Essayez sur ideone.
la source
a[99][99]
->**a
(-6). Vous ne pouvez pas appelerf()
sans arguments ici, vous avez besoin d’unn
. Remplacerf(n){
parf{n;
. Un autre -1 ici. En outre,f()
est maintenant appelable.**a
signifie 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.a[99][99]
para[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 octetsungolfed:
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 ».la source
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,46
instruction au début.la source
GOSUB
/RETURN
au lieu deCALL
/SUB
/END SUB
. En outre, vous pouvez supprimer les guillemetsDATA
pour 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 enA$="Elephant"
fait un octet de moins queLEFT$(A$,1)="E"
. Belle utilisation deRESTORE
, BTW!LUA 535 octets
ungolfed:
Essayez-le en ligne
la source
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 )
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.
la source
Japt ,
308303299295288280294289286 octetsContient un tas de non imprimables; suivez le lien ci-dessous pour les voir.
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.
la source
Powershell
921889886898 octetsce 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.
la source
ö
octet plus efficace?ö
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.an elephant
existe également une rupture de ligne supplémentaire entre les strophes précédentes, qui peut être supprimée en supprimant le"n"
.clojure, 526 octets
Voici ma tentative initiale. Je dois aimer le formatage et son illisibilité. J'espère que les avertissements de
use 'clojure.string
sont acceptables.Essayez-le en ligne.
Code formaté:
la source
Java,
571 555538 ou 516 octetsMais seulement 516 octets sont nécessaires pour obtenir un résultat en JShell
la source
an
vsa
.. Je l' ai fixé et golfed à 507 octetsi
avec0
jusqu'à10
changerb=a[i-1]
avecb=a[i++]
et en supprimant l'incrément où il est actuellement.Swift2, 519 octets
la source
Haskell
537499497 octetsEn 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
:la source
C (clang) , 552 octets
Essayez-le en ligne!
la source
Perl 5 , 413 octets
Essayez-le en ligne!
la source
JavaScript, 424 octets
Essaye-le
la source
Pyth, 342 octets
Essayez-le en ligne ici .
Explication à suivre.
la source