En essayant (et en échouant) de persuader mon fils en bas âge de manger son dîner, j'ai essayé de lui chanter. Au milieu de cette chanson, j'ai réalisé que la structure de la formule pouvait se prêter au codage du golf!
La tâche consiste à écrire un programme ou une fonction qui n'accepte aucune entrée et produit le texte suivant:
There's a hole in the bottom of the sea
There's a hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
Règles du challenge:
- Le texte peut être imprimé ou retourné comme sortie de fonction
- Chaque vers est séparé par une seule ligne vide
- Les espaces de fin sont acceptables tant qu'ils ne modifient pas la mise en forme (donc pas d'espaces de début ni d'espaces supplémentaires entre les mots)
- Les retours à la ligne sont également acceptables.
- Pas de nouvelles lignes principales.
- Toutes les langues sont les bienvenues. Il s’agit de code-golf . La réponse la plus courte en octets pour chaque langue est gagnante!
gzip -5
s’agisse pas d’un langage de programmation) , il est compressé à 186 octets (bzip2
etxz
semble faire pire).Réponses:
SOGL ,
1039493 octetsEssayez-le ici!
la source
Stax ,
908775 octetsExécuter et déboguer
Déballé, non-golfé et commenté, il ressemble à ceci.
Exécuter celui-ci
la source
Perl 5,
158154 octets154 octets
158 octets
la source
There's a bottom of the sea
. Les faits vérifier, +1There's a sea
mais c'est plus longPython 2 ,
202190187185183 183182181 octetsEssayez-le en ligne!
Anciennes alternatives à
'io'['g'in s]
(13 octets):'oi'[s[5]<'n']
'io'[len(s)>30]
,'ioo'[len(s)%3]
,'ooi'[len(s)%4]
et'io'[w[1]=='o']
Enregistré:
la source
"hole, t%shole\n"%a[1:]
enregistre un octet'oi'[s[5]<'n']
sera une vieille alternative aussi: en vedette'io'['g'in s]
!C (gcc) ,
261246236 octets-15 octets, merci à Daniel Schepler
-10 octets, grâce à ceilingcat
Essayez-le en ligne!
la source
,*b="_TH<0$\31\r"
place?05AB1E ,
1031009997969392 octetsEnregistrement d'un octet grâce à Kevin Cruijssen
Essayez-le en ligne!
Explication
“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v
commence une boucle sur la liste["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]
. Les mots sont compressés à l'aide du dictionnaire 05AB1E.Sur chacun nous faisons:
la source
õ
car, apparemment, il génère une chaîne vide par défaut lorsqu'uns
fichier wap est utilisé avec rien sur la pile . Je n'ai rien trouvé d'autre pour jouer au golf; très belle réponse!PowerShell ,
194188185180174 octetsEssayez-le en ligne!
Je n'arrive pas à attraper Python ...Fondamentalement, définit quelques cordes communes à
$h
,$a
,$z
, et$b
, puis passe à travers une boucle à travers chacun des éléments (hole
,log
...flea
,smile
), chaque itération en sortie le verset approprié. Il y a un peu de logique!$j++
au milieu pour rendre compte du commutateurin
/on
qui se produit. Sinon, toutes les chaînes sont simplement laissées sur le pipeline et la valeur par défautWrite-Output
nous donne des nouvelles lignes gratuitement.-6 octets grâce à Arnauld.
-3 octets grâce à mazzy.
-5 octets grâce à Veskah.
-6 octets grâce à mazzy.
la source
-split
pas mal de mots.JavaScript (ES6),
201 194 189 188187 octetsEnregistré 1 octet grâce à @Shaggy
Essayez-le en ligne!
JavaScript (ES6), 235 octets
Simplement RegPack'ed .
Essayez-le en ligne!
la source
Bash,
168160 octets160 octets
168 octets
Traduit de mon autre réponse en Perl.
la source
Japt
-Rx
,126116113112111109107 octetsIl s'avère que relever un défi de compression de cordes au téléphone est extrêmement difficile - qui aurait thunk?!
Essaye-le
la source
XML,
719673603514493486 octetsVous pouvez "exécuter" avec
xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>
.Ce serait beaucoup plus facile si XML n'était pas si bavard, mais du côté positif, cela fait moins de 25% de la taille du texte original.
la source
Retina 0.8.2 , 150 octets
Essayez-le en ligne! Explication:
Insérez le dernier verset.
Calcule tous les versets.
Mettez les versets dans le bon ordre.
Termine chaque couplet et ajoute le refrain.
Développez des espaces réservés.
la source
R ,
237231 octetsEssayez-le en ligne!
la source
PHP,
180178 octetsCourez avec
-nr
ou essayez-le en ligne .Donne des avertissements en PHP 7.2; pour résoudre le problème, mettez des guillemets autour
des éléments du tableau
io
,hole
et des deux éléments autonomesT
.la source
C (gcc) ,
334328307299 octetsEssayez-le en ligne!
la source
Perl 6 , 166 octets
Essayez-le en ligne!
la source
Japt
-R
, 142 octetsEssayez-le en ligne!
la source
Lot, 267 octets
t
contient une chaîne répétée dans le refrain,s
contient la majeure partie de la ligne de vers, tandis quer
choisit entrein the
eton the
. Dans les vers, seuls les 11 premiers caractères det
sont nécessaires, tandis que dans la première ligne de chorus, la deuxième copie det
a sa valeurT
minuscule et que la seconde ligne de chorus reprend les 25 derniers caractères des
.la source
Ruby ,
173170 octetsEssayez-le en ligne!
la source
Haskell ,
243215 octetsRéduit à 215 octets avec l'aide de nimi
Essayez-le en ligne!
(Ancienne version de 243 octets est ici ).
Une solution assez simple.
la source
s
qu’une fois, vous pouvez donc l’aligner. b) vous avez toujours quelque chose append et précédez àt
, de sorte que vous pouvez en faire une fonction (infixe):t#u=t:"here's a "++u
. c) la construction de la grande liste en fonctionl
demap(++" on the ")(words"smile flea ..."
est plus courte. Aussi: déplacez tout ce qui est ajouté à cette liste dans la liste elle-même. d) la liste des numéros d'abandonner maintenant va du8
bas à0
(numéros un seul chiffre!) e) inline maintenanti
aussi quelques octets de sauvegarde. f) inutile de nommer votre fonction principale. Selon notre méta, les valeurs de Haskell sont considérées comme des fonctions appropriées, alors laissez tomberv=
.>>=
(concatMap) à partir de la liste monad et inlineconcat
in functionl
. Essayez-le en ligne!JavaScript (Babel Node) , 239 octets
-7 octets de @Oliver
*.*
Essayez-le en ligne!
la source
T
sur la 3ème ligne de chaque verset doit être en minuscule.Python 3 ,
213 206 198193 octetsEssayez-le en ligne!
-15 octets grâce à @Sara
-5 octets grâce à @ ASCII uniquement
Probablement un peu plus golfable, mais pas beaucoup.
la source
o=e=
faire les deuxo
et see
référer au même objet. J'ai aussi pensé que la scission serait plus longue.o
ete
ne se réfèrent au même objet ... il est juste que les chaînes sont immuables en Python tant de choses comme+=
va créer une nouvelle copie au lieu de l'existant muterPropre , 267 octets
Essayez-le en ligne!
la source
cQuents ,
238219 octetsEssayez-le en ligne!
Ce défi m'a finalement amené à implémenter des listes et des chaînes dans ma langue. Ce langage est construit pour les séquences entières, donc il s’est très bien passé!
Explication
la source
Perl 5 , 194 octets
@ ASCII seulement rase de 6 octets avec newlines littérale et un
\l
truc que j'ai oubliéEssayez-le en ligne!
la source
\l
, mais je n'ai jamais eu de raison de l'utiliser, alors je n'y ai jamais pensé.Charbon de bois ,
115106 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Edit: Sauvegardé 9 octets en copiant mon code de lot pour la dernière ligne du refrain. Explication:
Sauvegardez la chaîne
There's a hole
, qui est utilisée deux fois telle quelle, une troisième fois en minuscules et une quatrième fois, mais uniquement pour les 10 premiers caractères.Fractionner la chaîne
bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile o
surx
s.Boucle sur les 9 versets, en prenant les premiers
i+2
éléments du tableau, en les inversant, en les joignantn the
et en préfixantThere's a
le résultat.Développez chaque ligne en un couplet en dupliquant la ligne et en construisant le refrain. Chaque ligne du verset est alors implicitement imprimée sur chaque ligne et chaque verset est implicitement séparé par une ligne vierge.
la source
V ,
184170 octetsEssayez-le en ligne!
Explication:
4iThere's a hole in the bottom of the sea<\n><esc>
Insérez "il y a un trou dans le fond de la mer" 4 fois.kk
Passer à la troisième ligney5w
copie "Il y a un trou"5eá,
insérer une virgule après "Il y a un trou"lp
coller après la virguleD
supprimer le reste de la ligne5brt
le deuxième T minusculeHj4yy
copier 4 lignes de la deuxième ligneGp
Tout coller après la première ligne4w8ion the <esc>
(à la fin du premier verset) passez au premier "trou" du deuxième verset et insérez "sur le" 8 fois2briilog <esc>
revenir en arrière jusqu'au dernier "on", remplacez le o par un i puis insérez "log"3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc>
Reculer dans la ligne en insérant les mots appropriés entre chaque "sur"7ñ4yykp4wd3wñ
exécuter4yykp4wd3w
7 fois4yykp
dupliquer le verset avant celui-ci4wd3w
passer au premier mot après "Il y a un trou" et supprimer 3 mots8ñÄ5jñ
dupliquer la première ligne de chaque verset après le premier (il y en a 8 à faire)la source
/// , 216 octets
Essayez-le en ligne!
Ce type de tâche est la seule et unique chose pour laquelle /// est raisonnablement bon. : D Hey, le résultat est plus court que C, C # ou Java!
La sortie de ce programme se termine par deux sauts de ligne de fin; J'espère que ce n'est pas un deal-breaker.
Quoi qu'il en soit, il n'y a pas de réelle intelligence ici. J'ai simplement identifié des chaînes répétées et défini des raccourcis d'un caractère pour celles-ci, et les ai répétées jusqu'à ce que je ne voie plus de chaînes répétées. Je l'ai fait d'une manière plus ou moins naïve et gourmande. Cependant, j'ai intentionnellement défini un raccourci pour "sourire aux puces sur la ... mer", suivi de "puces à la volée sur la ... mer", etc., afin de former une chaîne de raccourcis . Le résultat est que toute la séquence de nouveaux noms est clairement visible dans le code, et je trouve cela très agréable. :)
Après le remplacement de V et U, nous avons le code plus lisible suivant:
la source
LaTeX, 265
268caractèrescompile dans un joli PDF, avec des indentations de paragraphe et tout.
Ungolfed et commenté:
De sortie:
la source
C # (compilateur interactif Visual C #) , 220 octets
Essayez-le en ligne!
-5 octets grâce à @ASCIIOnly et -2 octets grâce à @quelqu'un!
J'ai un petit enfant et je peux vous assurer que cette chanson est à la fois entraînante et agaçante.
la source
.Any()
->!=""
?in
dans leforeach
> _>