Il y a un trou au fond de la mer


48

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 . La réponse la plus courte en octets pour chaque langue est gagnante!

6
Semblable à Il y avait une vieille dame (d'autres défis similaires, par exemple, ceux-ci ont été fermés en double, bien que je ne pense pas qu'ils le devraient nécessairement.)
Jonathan Allan

6
Ho, ro, la tourbière de rattlin ', la tourbière de la vallée-o.
Fəˈnɛtɪk

4
À des fins de comparaison (bien qu’il ne gzip -5s’agisse pas d’un langage de programmation) , il est compressé à 186 octets ( bzip2et xzsemble faire pire).
Daniel Schepler le

2
Félicitations d’un autre parent développeur :)
AJFaraday

1
Je veux adapter cette chanson à 05AB1E ... "Il y a un trou dans oh-five-ay-bee-one-ee!"
Urne Magique Octopus le

Réponses:


23

SOGL , 103 94 93 octets

Ψ ~Δ№Q‘离vζh‛←&M⁶╥7[P≈╔6≡⁸(φΔ\⅔Σ‚>≡ā⁷⁽○¹‘Ξ⁵K4s³‘⁽Bθ2n{@∑" the ”+Κ:bΚē‽:C}TPb"n@²‘+Tō, upcPøP

Essayez-le ici!

...‘                 push "bottom of the sea" - kept for the loop, here for 
    ...‘             push "hole in log in bump on frog on wart on hair on fly on flea on smile on"
        ...‘         push "there's a "
            ⁽        uppercase the 1st letter of that
             B       save "There's a " in B
              θ      split the long data string on spaces
               2n    split in arrays of length 2

{                     for each of those:
 @∑                   join the current array with spaces - e.g. "hole in"
   " the ”+           append " the " to it
           Κ          prepend that to "bottom of the sea" (or whatever it is now)
            :         create a copy
             bΚ       prepend B to it - finishes current line
               ē‽:C}  if (E++), save a copy of that in C (for the last line)

TP                   print the current line twice
  b"...‘+            B + "hole" - "There's a hole"
         T           output that, keeping item
          ō,         output ", "
             up      print the kept item lowercased
               cP    print the contents of C
                 øP  print an empty line

14
Mais .... mais comment?
SomeShinyMonica le

8
Incroyable. Comment même--
Austin Burk le

1
HNQ frappe à nouveau! : \
Shaggy le

4
Souhaitez-vous ajouter une explication? Curieux de voir comment cela fonctionne.
Kevin Cruijssen le

@KevinCruijssen ajouté
dzaima le

19

Stax , 90 87 75 octets

¥▌▼h4█☻■Ω1gçΔ¶Zjµ│☺X▄)/╞▄╒)¥jêLqα╧ñu┌⌂½╧ûⁿ↕O◘╔╪kl<æàbπïfuσ♪╫qΓ╪ûQ├╘Te♥Æó♣ƒE

Exécuter et déboguer

Déballé, non-golfé et commenté, il ressemble à ceci.

`;$w]i"50h1&V~OP>F$`            compressed literal for "There's a hole in the bottom of the sea"
X                               store in register X without popping
zG                              push an empty string and jump to the target (trailing }) 
`hfUiVx}.|j~vG12])Bxk?v zF`j    split "log bump frog wart hair fly flea smile" into array of words
F                               for each word, execute the following
  i. o. i?                      (i ? " o" : " i") where i is the 0-based iteration index
  +                             concatenate to the word
  `_o9!`+                       concatenate "n the "
  G                             jump to target below, resume next foreach iteration when finished
}                               this is the target of `G`, execution resumes when finished
  As|@                          insert substring at position 10
  QQ                            peek and print with newlines twice
  x14(                          trim string to leftmost 14 characters
  q                             peek and print without newlines
  ., p                          print ", " without newline
  vP                            lowercase 14 characters and print with newline
  xP                            push value of register X, then print with newline
  zP                            print blank line

Exécuter celui-ci


2
Souhaitez-vous ajouter une explication? Curieux de voir comment cela fonctionne.
Kevin Cruijssen le

Je le ferai mais j'ai toujours le sentiment qu'une approche totalement différente fera mieux. Après avoir réussi ou échoué, j'expliquerai tout ce qui reste.
récursif le

1
@ KevinCruijssen: J'avais le sentiment qu'il y avait une bien meilleure approche. Effectivement, je l’ai totalement réécrit et j’ai sauvé 12 octets supplémentaires. J'ai ajouté une explication aussi.
récursif le


13

Python 2 , 202 190 187 185 183 183 182 181 octets

s="bottom of the sea\n"
a="There's a "
for w in'hole log bump frog wart hair fly flea smile'.split():s=w+" %sn the "%'io'['g'in s]+s;print(a+s)*2+a+"hole, t%shole\n"%a[1:]+a+s[-30:]

Essayez-le en ligne!

Anciennes alternatives à 'io'['g'in s](13 octets):

  • 14: 'oi'[s[5]<'n']
  • 15: 'io'[len(s)>30], 'ioo'[len(s)%3], 'ooi'[len(s)%4]et'io'[w[1]=='o']

Enregistré:

  • -1 octet, merci à Jonathan Allan
  • -1 octet, merci à Rod
  • -1 octet, merci à Erik l'Outgolfer

"hole, t%shole\n"%a[1:]enregistre un octet
Jonathan Allan

Vous pouvez enregistrer un octet en lâchant le zip
Rod

@JonathanAllan Merci :)
TFeld le

@Rod Merci, :-)
TFeld le

'oi'[s[5]<'n']sera une vieille alternative aussi: en vedette 'io'['g'in s]!
Erik the Outgolfer

13

C (gcc) , 261 246 236 octets

#define X" on the "
char*a="smile"X"flea"X"fly"X"hair"X"wart"X"frog"X"bump"X"log in the hole in the bottom of the sea\n";f(i){for(i=0;i<9;)printf("T%s%sT%1$s%2$sT%1$shole, t%1$shole\nT%1$s%3$s\n","here's a ",a+"_TH<0$\31\r"[i++],a+95);}

-15 octets, merci à Daniel Schepler
-10 octets, grâce à ceilingcat

Essayez-le en ligne!


2
Pourriez-vous écrire à la ,*b="_TH<0$\31\r"place?
Daniel Schepler le

Est-ce que cela sauverait des octets pour définir "dans le"?
OldBunny2800 le

@ OldBunny2800 non, ce serait plus long ! dans ce cas, il faut au moins 6 occurrences pour être efficace ...
Giacomo Garabello

12

05AB1E , 103 100 99 97 96 93 92 octets

Enregistrement d'un octet grâce à Kevin Cruijssen

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v’T€Î's a ’s„oiN2‹èy“ÿ ÿn€€ ÿ“©“—耂€€í™“JDN_iDU}X14£Dl‚„, ýXõ»,®

Essayez-le en ligne!

Explication

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#vcommence 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:

’T€Î's a ’    # push the string "There's a "
s             # move the string from the previous iteration to the top of the stack
              # will be an empty string the first iteration since there is no input
„oiN2‹è       # push "i" for the first 2 iterations and "o" otherwise
y             # push the current word
“ÿ ÿn€€ ÿ“    # use interpolacing to create the meat of the current iteration string
              # meaning "hole in the ", "log in the hole in the " and so on
©             # store a copy in the register for the next iteration
“—耂€€í™“    # push the string "bottom of the sea"
JD            # join the whole line together and duplicate it
N_iDU}        # if this is the first iteration, store a copy of the line in X
X14£          # push the first 14 chars of X, which is "There's a hole"
Dl            # make a lower-case copy
‚„, ý         # join the original with the lowercase copy on ", ", forming line 3
X             # push X which is line 4
õ             # push and empty string, to create the line break between sections
»,            # join the whole section on newlines and print
®             # push the register for the next iteration

2
Vous pouvez supprimer le débutõ car, apparemment, il génère une chaîne vide par défaut lorsqu'un sfichier wap est utilisé avec rien sur la pile . Je n'ai rien trouvé d'autre pour jouer au golf; très belle réponse!
Kevin Cruijssen le

1
@ KevinCruijssen: Ah oui, je n'ai pas considéré cela comme d'habitude. Merci :)
Emigna

11

PowerShell , 194 188 185 180 174 octets

$z=$a="in the bottom of the sea"
$b="here's a"
$h="$b hole"
echo hole log bump frog wart hair fly flea smile|%{,"T$b $_ $a"*2
$a='oi'[!$j++]+"n the $_ $a"
"T$h, t$h
T$h $z
"}

Essayez-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 commutateur in/ onqui se produit. Sinon, toutes les chaînes sont simplement laissées sur le pipeline et la valeur par défaut Write-Outputnous 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.



@ Mazzy C'est un truc intelligent. Je devrai garder cela à l'esprit car j'utilise -splitpas mal de mots.
AdmBorkBork le




9

JavaScript (ES6),  201 194 189 188  187 octets

Enregistré 1 octet grâce à @Shaggy

_=>`14log4bump5frog5wart5hair5fly5flea5smile5`.replace(/.+?\d/g,w=>`T0${(p=w+3+p)+p}1, t01
T01432
`.replace(/\d/g,n=>`here's a |hole|bottom of the sea
|n the | i| o`.split`|`[n]),p=`2T0`)

Essayez-le en ligne!


JavaScript (ES6), 235 octets

Simplement RegPack'ed .

_=>[..."Z[]^_$cdjkqvxz{}~"].reduce((p,c)=>(l=p.split(c)).join(l.pop()),`Tj{{}qq}$$}~~}dd}__}xx}cc}[[v~ frogz$}v
Z{kZz on^x flyz_v], tj]Zkq log in^{k] in^ bottom of^ seajhere's ad wartz~c fleazx$ bumpzq_ hairzd^ the] hole[ smilezcZ
Tj`)

Essayez-le en ligne!


8

Bash, 168 160 octets

r="There's a bottom of the sea
";for i in {hole,log}\ in {bump,frog,wart,hair,fly,flea,smile}\ on;{
r=${r/a/a $i the};t=${r:0:14};echo "$r$r${u=$t, ${t,}
$r}";}

160 octets

168 octets

Traduit de mon autre réponse en Perl.


7

Japt -Rx, 126 116 113 112 111 109 107 octets

Il s'avère que relever un défi de compression de cordes au téléphone est extrêmement difficile - qui aurait thunk?!

`T's»dâ ÈÞ­omºfdÈ a`rdS
tE8
¯E
`logn¿mpnfgnØnirnf§nf¤Úè`qÍË2ÆiAV¯E©8 iF¯E ÔqVri'oÃpW+v iSi,)UPÃc

Essaye-le

                                              :The first 3 lines get assigned to variables U, V & W, respectively
`...`                                         :The compressed string "There'sdadholedindthedbottomdofdthedsea"
     rdS                                      :Replace all "d"s with spaces
tE8                                           :Substring of U from 0-based index 14 (E), of length 8 (="  in the ")
¯E                                            :Slice U to index 14 (="There's a hole")
`...`                                         :The compressed string "lognbumpnfrognwartnhairnflynfleasmilent"
     qÍ                                       :Split on "n" (note that the last element is irrelevant)
       Ë                                      :Map each element at 0-based index E in array F
        2Æ                                    :  Map the range [0,2)
          iA                                  :    Insert the following in U at index 10
            V¯                                :      V sliced to index
              E©8                             :        Logical AND of E and 8 (=0 on first iteration, 8 on all others)
                  i                           :      Prepend
                   F¯E                        :        Slice F to index E
                       Ô                      :        Reverse
                        q                     :        Join with
                         Vri'o                :          Replace "i" with "o" in V
                              Ã               :  End map
                               p              :  Push
                                W+            :    W appended with
                                  v           :      W lowercased
                                    iSi,      :      Prepended with a space prepended with a comma
                                        )     :    End append
                                         UP   :    U and an empty string
                                           Ã  :End map
                                            c :Flatten
                                              :Implicitly join with newlines, trim & output

7

XML, 719 673 603 514 493 486 octets

<!DOCTYPE a[<!ENTITY T "There's a"><!ENTITY O " on the"><!ENTITY a " hole in the bottom of the sea
"><!ENTITY b " log in the&a;"><!ENTITY c " bump&O;&b;"><!ENTITY d " frog&O;&c;"><!ENTITY e " wart&O;&d;"><!ENTITY f " hair&O;&e;"><!ENTITY g " fly&O;&f;"><!ENTITY i " flea&O;&g;"><!ENTITY z "&T; hole, there's a hole
&T;&a;
">]><a>&T;&a;&T;&a;&z;&T;&b;&T;&b;&z;&T;&c;&T;&c;&z;&T;&d;&T;&d;&z;&T;&e;&T;&e;&z;&T;&f;&T;&f;&z;&T;&g;&T;&g;&z;&T;&i;&T;&i;&z;&T; smile&O;&i;&T; smile&O;&i;&z;</a>

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


5

Retina 0.8.2 , 150 octets


THsmile oNflea oNfly oNhair oNwart oNfrog oNbump oNlog iNE
N
$&$'¶TH
O^$`

.+
$&¶$&¶THW, tHW¶THE¶
H
here's a 
E
W iNbottom of the sea
W
hole
N
n the 

Essayez-le en ligne! Explication:


THsmile oNflea oNfly oNhair oNwart oNfrog oNbump oNlog iNE

Insérez le dernier verset.

N
$&$'¶TH

Calcule tous les versets.

O^$`

Mettez les versets dans le bon ordre.

.+
$&¶$&¶THW, tHW¶THE¶

Termine chaque couplet et ajoute le refrain.

H
here's a 
E
W iNbottom of the sea
W
hole
N
n the 

Développez des espaces réservés.


5

R , 237 231 octets

i=" in the "
for(j in 0:8)cat(f<-c(t<-"There's a ",paste(c("log","bump","frog","wart","hair","fly","flea","smile")[j:0],collapse=" on the "),if(j)i,h<-"hole",i,b<-"bottom of the sea
"),f,t,h,", there's a ",h,"
",t,h,i,b,"
",sep="")

Essayez-le en ligne!


5

PHP, 180 178 octets

foreach([hole,log,bump,frog,wart,hair,fly,flea,smile]as$w)echo$a=T.($b="here's a ").($s="$w ".io[++$i>2]."n the $s").$c="bottom of the sea
",$a,T,$b.=hole,", t$b
T$b in the $c
";

Courez avec -nrou 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, holeet des deux éléments autonomes T.


4

C (gcc) , 334 328 307 299 octets

char*s="here's a \0smile 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\n";i;k=105;a[]={0,1,1,1,1,0,1,2,2};main(j){for(;i<9;k-=11+a[i++])do{printf("T%s%s",s,s+k);}while(j++&1||!printf("T%shole, t%shole\nT%s%s\n",s,s,s,s+105));}

Essayez-le en ligne!



4

Perl 6 , 166 octets

($/=@(($!="There's a")X [\R,](<hole log bump frog wart hair fly flea smile>Z(<i o>[$++>1]~"n the")xx*)X"bottom of the sea
")).map:{say "$_$_$! hole, {$!.lc} hole
$0"}

Essayez-le en ligne!


4

Japt -R , 142 octets

`—¤clogc¿mpcfžgcØÖŽrcf§cf¤acsÚè`qc
`ˆ e Þ­om  e  a`
`T”œ's a `
£W+U¯YÄ ÔËE?"io"gE<Y +`n e `:P +Dø+` {V}
` ²+W+`—¤, t”œ's a —¤
{W}—¤ {V+R

Essayez-le en ligne!


4

Lot, 267 octets

@echo off
set r=i
set t= There's a hole
set s=bottom of the sea
for %%w in (hole log bump frog wart hair fly flea smile)do call:c %%w
exit/b
:c
set s=%1 %r%n the %s%
echo%t:~,11%%s%
echo%t:~,11%%s%
echo%t%,%t:T=t%
echo%t%%s:~-25%
echo(
if %1==log set r=o

tcontient une chaîne répétée dans le refrain, scontient la majeure partie de la ligne de vers, tandis que rchoisit entre in theet on the. Dans les vers, seuls les 11 premiers caractères de tsont nécessaires, tandis que dans la première ligne de chorus, la deuxième copie de ta sa valeur Tminuscule et que la seconde ligne de chorus reprend les 25 derniers caractères de s.


4

Ruby , 173 170 octets

a="T#{["here's a hole"]*3*"%s"%[", t","
T"]+c=" in the "}bottom of the sea

"
b=a[31,39]
%w{log bump frog wart hair fly flea smile x}.map{|i|puts b,b,a;b[9]+=i+c;c[1]=?o}

Essayez-le en ligne!


4

Haskell , 243 215 octets

Réduit à 215 octets avec l'aide de nimi

c[[l n,l n,'T'#h++", "++'t'#h,l 8,""]|n<-[8,7..0]]
t#u=t:"here's a "++u
h="hole"
c=concat
l n='T'#c(drop n$map(++" on the ")(words"smile flea fly hair wart frog bump")++["log in the ",h," in the bottom of the sea"])

Essayez-le en ligne!

(Ancienne version de 243 octets est ici ).

Une solution assez simple.

-- main function producing a list of lines
v = concat [[
    l n,
    l n, -- second line of each verse equals to its first line
    'T' # h ++ ", " ++ 't' # h,
    l 8, -- last line of each verse is the same in all verses
    ""
  ] | n <- [8,7..0]]

-- a small helper to construct similar strings 
t # u = t : "here's a " ++ u

h = "hole"

-- construct a first line of n-th verse (with n = 8 is the first and n = 0 is the last one)
-- Every such line begins with a constant prefix followed by expanding list of nested entities
l n = 'T' # concat (
      drop n $
         map (++ " on the ") (words "smile flea fly hair wart frog bump")
         ++ ["log in the ", h, " in the bottom of the sea"]
    )

1
Quelques conseils: a) vous n’utilisez squ’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 fonction lde map(++" 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 du 8bas à 0(numéros un seul chiffre!) e) inline maintenant iaussi 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 tomber v=.
nimi le

... dans l'ensemble 215 octets Essayez-le en ligne!
nimi le

1
Encore 3 octets à sauvegarder: au lieu de la compréhension de liste, vous pouvez utiliser >>=(concatMap) à partir de la liste monad et inline concatin function l. Essayez-le en ligne!
nimi

3

JavaScript (Babel Node) , 239 octets

-7 octets de @Oliver *.*

(x=0,r='hole0log0bump0frog0wart0hair0fly0flea0smile'.split`0`).map(a=>(t=(i="There's a ")+a+r.slice(0,x++).reverse().map((h,_)=>` ${"io"[_<x-2|0]}n the ${h}`).join``+(o=` in the bottom of the sea
`))+t+(`${k=i+"hole"}, ${k}
`)+k+o).join`
`

Essayez-le en ligne!


1
La seconde Tsur la 3ème ligne de chaque verset doit être en minuscule.
Shaggy

3

Python 3 , 213 206 198 193 octets

k='n the ';o=e='bottom of the sea\n';b="There's a ";h='hole'
for j in[h]+'log bump frog wart hair fly smile'.split():o=j+' '+'io'['g'in o]+k+o;print(b+o+b+o+b+h+', t'+b[1:]+h+'\n'+b+h+' i'+k+e)

Essayez-le en ligne!


-15 octets grâce à @Sara
-5 octets grâce à @ ASCII uniquement

Probablement un peu plus golfable, mais pas beaucoup.



@SaraJ Merci. J'étais sous l'impression (clairement erronée) que o=e=faire les deux oet se eréférer au même objet. J'ai aussi pensé que la scission serait plus longue.
Artemis Fowl

@ArtemisFowl oet e 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 muter
ASCII seulement


@ ASCII-only, je le sais, mais je pensais que python s’assurait qu’ils continuaient à faire référence au même objet.
Artemis Fowl

2

Propre , 267 octets

import StdEnv,Text,Data.List
t="here's a "
h="hole"
b=" in the bottom of the sea"
f=foldr((+)o\s#p="T"+t+join" on the "(reverse s)+" in the "+h+b
=join"\n"[p,p,"T"+t+h+", t"+t+h+"\nT"+t+h+b+"\n\n"])""(tl(inits["log","bump","frog","wart","hair","fly","flea","smile"]))

Essayez-le en ligne!


2

cQuents , 238 219 octets

|@
#36::"T"~c1)~j\rbk));@ )~c2,Z,"T"~c1)~"hole, t"~c1)~"hole","T"~c1)~c2)~@

::"","log in the","bump"~c3,"frog"~c3,"wart"~c3,"hair"~c3,"fly"~c3,"flea"~c3,"smile"~c3
:"here's a ","hole in the bottom of the sea"," on the"

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

:"here's a ","hole in the bottom of the sea"," on the"

    helper line: c1), c2), and c3) access the three terms in this list

::"","log in the","bump"~c3,"frog"~c3,"wart"~c3,"hair"~c3,"fly"~c3,"flea"~c3,"smile"~c3

    helper line: yields a list containing the first n terms in it, accessed with bx)
    for example, the first three terms are:

"","log in the","bump"~c3

    so b3) would yield ["","log in the","bump on the"] (~ is concatenation and c3 is " on the")


|@
#36::"T"~c1)~j\rbk));@ )~c2,Z,"T"~c1)~"hole, t"~c1)~"hole","T"~c1)~c2)~@


|@
                              join sequence on literal newline
#36::                         output first 36 terms in sequence joined together
                              following are the 4 terms in the sequence, which will cycle through 9 times (for a total of 36 terms)
"T"~c1)~j\rbk));@ )~c2,       first term
"T"~c1)~                      "T" concat "here's a " concat
        j\rbk));@ )           the first k terms of b, reversed, and joined on " "
                   ~c2,       concat "hole in the bottom of the sea"
Z,                            second term - same as previous
"T"~c1)~"hole, t"~c1)~"hole", third term
"T"~c1)~                      "T" concat "here's a " concat
        "hole, t"~c1)~"hole", "hole, t" concat "here's a " concat "hole"
"T"~c1)~c2)~@
                              fourth term - "T" concat "here's a " concat "hole on the bottom of the sea" concat newline

2

Perl 5 , 194 octets

@ ASCII seulement rase de 6 octets avec newlines littérale et un \ltruc que j'ai oublié

$"=" on the ";say+($b=($e="There's a ").hole,$c=" in the bottom of the sea",$/)x2,$.="$b, \l$b
$b$c
";say"$e@a[-$_..-1] in the hole$c
"x2,$.for 1..(@a=qw/smile flea fly hair wart frog bump log/)

Essayez-le en ligne!



Ouaip. Bon travail. J'aurais dû me souvenir des nouvelles lignes pour certains. Je l'ai déjà vu \l, mais je n'ai jamais eu de raison de l'utiliser, alors je n'y ai jamais pensé.
Xcali




2

Charbon de bois , 115 106 octets

≔There's a holeθEE⁹⁺…θχ⪫⮌…⪪”↶±∧⟲!↶⁼,(_⎇RB↧ω⪪zθⅉQθ`✳&⬤⸿◧σ⁻y▷»ΣK▶↙⁻υX`SξQ6 /ι⁹Wq”x⁺²ιn the ⟦ιι⁺⁺θ, ↧θ⁺θ✂ι±²⁵

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

≔There's a holeθ

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.

⪪”↶±∧⟲!↶⁼,(_⎇RB↧ω⪪zθⅉQθ`✳&⬤⸿◧σ⁻y▷»ΣK▶↙⁻υX`SξQ6 /ι⁹Wq”x

Fractionner la chaîne bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile osur xs.

E⁹⁺…θχ⪫⮌…...⁺²ιn the 

Boucle sur les 9 versets, en prenant les premiers i+2éléments du tableau, en les inversant, en les joignant n theet en préfixant There's ale résultat.

E...⟦ιι⁺⁺θ, ↧θ⁺θ✂ι±²⁵

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.


2

V , 184 170 octets

4iThere's a hole in the bottom of the sea
kky5w5eá,lpD5brtHj4yyGp4w8ion the 2briilog 3bibump 3bifrog 3biwart 3bihair 3bifly 3biflea 3bismile 7ñ4yykp4wd3wñ8ñÄ5jñ

Essayez-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 ligne
  • y5w copie "Il y a un trou"
  • 5eá, insérer une virgule après "Il y a un trou"
  • lp coller après la virgule
  • D supprimer le reste de la ligne
  • 5brt le deuxième T minuscule
  • Hj4yy copier 4 lignes de la deuxième ligne
  • Gp Tout coller après la première ligne
  • 4w8ion the <esc>(à la fin du premier verset) passez au premier "trou" du deuxième verset et insérez "sur le" 8 fois
  • 2briilog <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écuter 4yykp4wd3w7 fois
    • 4yykp dupliquer le verset avant celui-ci
    • 4wd3w passer au premier mot après "Il y a un trou" et supprimer 3 mots
  • 8ñÄ5jñ dupliquer la première ligne de chaque verset après le premier (il y en a 8 à faire)

2

/// , 216 octets

/V/\/\///U/\/ VS/TCVR/iBVQUtheVPUoBVOUholeVN/RASVM/ASO, tCO
SA
VL/RMSVKUlog VJUbumpPKVIUfrogPJVHUwartPIVGUhairPHVFUflyPGVEUfleaPFVDUsmilePEVC/here's aVB/nQVA/O R bottom ofQ sea
/SASMSKNKLJNJLINILHNHLGNGLFNFLENELDNDRM

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:

/S/TC//R/iB//Q/ the//P/ oB//O/ hole//N/RAS//M/ASO, tCO
SA
//L/RMS//K/ log //J/ bumpPK//I/ frogPJ//H/ wartPI//G/ hairPH//F/ flyPG//E/ fleaPF//D/ smilePE//C/here's a//B/nQ//A/O R bottom ofQ sea
/SASMSKNKLJNJLINILHNHLGNGLFNFLENELDNDRM

2

LaTeX, 265 268 caractères

\documentclass{book}\input{pgffor}\def\i{bottom of the sea}\let~\i\def\b{here's a }\def\h{hole}\def\s#1{ in}\begin{document}\foreach\x in{\h\s,log\s,bump,frog,wart,hair,fly,flea,smile}{\xdef~{\x{ on} the ~}T\b~\\T\b~\\T\b\h, t\b\h\\T\b\h\,in the \i\par}\enddocument

compile dans un joli PDF, avec des indentations de paragraphe et tout.

Ungolfed et commenté:

\documentclass{book}
\input{pgffor}
\def\i{bottom of the sea}   %for re-use in the last two verses 
\let~\i                     %here I keep attaching words
\def\b{here's a }               
\def\h{hole}
\def\s#1{ in}               %this replaces the next token with "in", useful for log and hole where "in" is used instead of"on"
\begin{document}
\foreach\x in{\h\s,log\s,bump,frog,wart,hair,fly,flea,smile}{
    \xdef~{\x{ on} the ~}   %keep attaching words and on/on to ~
    T\b~\\                  %verse 1
    T\b~\\                  %verse 2
    T\b\h, t\b\h\\          %verse 3
    T\b\h\,in the \i\par    %verse 4
}
\enddocument

De sortie:

entrez la description de l'image ici


2

C # (compilateur interactif Visual C #) , 220 octets

string b="There's a ",d="hole in the bottom of the sea\n",e,f;" log bump frog wart hair fly flea smile".Split().Any(s=>Write((e=b+(f=s!=""?s+(f!=""?" o":" i")+"n the "+f:s)+d)+e+b+$@"hole, there's a hole
{b+d}
")is int);

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.


1
Je suis désolé de vous avoir rappelé qu'il existe: o)
Sok

.Any()-> !=""?
ASCII uniquement le


et vous n'avez pas besoin de l'espace après indans le foreach> _>
ASCII seulement

@ASCIIOnly - Merci pour les conseils :)
Dana
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.