C'è un buco nel fondo del mare


48

Mentre provavo (e fallivo) hanno persuaso mio figlio a mangiare la sua cena, ho provato a cantare con lui. A metà di questa canzone ho capito che la struttura formulaica poteva prestarsi bene al golf del codice!

Il compito è scrivere un programma o una funzione che non accetta input e produce il seguente testo:

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

Regole della sfida:

  • Il testo può essere stampato o restituito come output della funzione
  • Ogni verso è separato da una singola riga vuota
  • Lo spazio bianco finale è OK purché non cambi il layout (quindi nessuno spazio bianco iniziale o spazi extra tra le parole)
  • Anche le nuove righe finali vanno bene.
  • Nessuna nuova linea principale.
  • Sono benvenute tutte le lingue, e questo è , quindi vince la risposta più breve in byte per ogni lingua!

6
Simile a C'era una vecchia signora (altre sfide simili, ad esempio, sono state chiuse come duplicati, anche se non credo che debbano necessariamente farlo.)
Jonathan Allan,

6
Ho, ro, la torbiera del rattlin, la torbiera giù nella valle-o.
fəˈnɛtɪk,

4
Per confronto (anche se non un linguaggio di programmazione) lo gzip -5comprime a 186 byte ( bzip2e xzsembra che faccia peggio).
Daniel Schepler,

2
Complimenti, da un altro genitore sviluppatore :)
AJFaraday

1
Voglio adattare questa canzone a 05AB1E ... "C'è un buco in oh-five-ay-bee-one-ee!"
Magic Octopus Urn

Risposte:


23

SOGL , 103 94 93 byte

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

Provalo qui!

...‘                 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
Ma .... ma come?
SomeShinyMonica

8
Incredibile. Come ...
Austin Burk, il

1
HNQ colpisce ancora! : \
Shaggy

4
Ti dispiacerebbe aggiungere una spiegazione? Curioso di vedere come funziona.
Kevin Cruijssen,

@KevinCruijssen ha aggiunto
dzaima il

19

Stax , 90 87 75 byte

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

Esegui ed esegui il debug

Disimballato, ungolfed e commentato sembra così.

`;$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

Esegui questo


2
Ti dispiacerebbe aggiungere una spiegazione? Curioso di vedere come funziona.
Kevin Cruijssen,

Lo farò ma ho ancora la sensazione che un approccio totalmente diverso farà meglio. Dopo che avrò successo o meno, spiegherò tutto ciò che è rimasto.
ricorsivo

1
@KevinCruijssen: ho avuto la sensazione che ci fosse un approccio molto migliore. Abbastanza sicuro, l'ho completamente riscritto e ho salvato altri 12 byte di gonfiaggio. Ho aggiunto anche qualche spiegazione.
ricorsivo il


13

Python 2 , 202 190 187 185 183 182 181 byte

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

Provalo online!

Vecchie alternative a 'io'['g'in s](13 byte):

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

Salvato:

  • -1 byte, grazie a Jonathan Allan
  • -1 byte, grazie a Rod
  • -1 byte, grazie a Erik the Outgolfer

"hole, t%shole\n"%a[1:]salva un byte
Jonathan Allan il

È possibile salvare un byte rilasciando lo zip
Rod

@JonathanAllan Thanks :)
TFeld il

@Rod Grazie, :-)
TFeld il

'oi'[s[5]<'n']sarà anche una vecchia alternativa: In primo piano 'io'['g'in s]!
Erik the Outgolfer,

13

C (gcc) , 261 246 236 byte

#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 byte, grazie a Daniel Schepler
-10 byte, grazie a ceilingcat

Provalo online!


2
Potresti scrivere ,*b="_TH<0$\31\r"invece?
Daniel Schepler,

Salverebbe qualche byte per definire "nel"?
OldBunny2800

@ OldBunny2800 no, sarebbe più lungo ! in questo caso hai bisogno di almeno 6 occorrenze per essere efficace ...
Giacomo Garabello

12

05AB1E , 103 100 99 97 96 93 92 byte

Salvataggio di un byte grazie a Kevin Cruijssen

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

Provalo online!

Spiegazione

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#vavvia un ciclo sull'elenco ["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]. Le parole sono compresse usando il dizionario 05AB1E.

Su ognuno facciamo:

’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
È possibile rimuovere il comando inizialeõ , poiché apparentemente genera una stringa vuota per impostazione predefinita quando sviene utilizzato un wap senza nulla nello stack . Non sono riuscito a trovare nient'altro da golf; risposta molto bella!
Kevin Cruijssen,

1
@KevinCruijssen: Oh sì, non l'ho preso in considerazione dato che di solito c'è un input. Grazie :)
Emigna il

11

PowerShell , 194 188 185 180 174 byte

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

Provalo online!

Non riesco proprio a catturare Python ...

Fondamentalmente, stabilisce alcune stringhe comuni $h, $a, $z, e $b, quindi passa attraverso un ciclo attraverso ognuno degli elementi ( hole, log, ... flea, smile), ogni iterazione emettere il verso appropriata. C'è un po 'di logica con !$j++nel mezzo per tenere conto dell'opzione in/ onche accade. Altrimenti, tutte le stringhe vengono lasciate sulla pipeline e il valore predefinito Write-Outputci fornisce nuove righe gratuitamente.

-6 byte grazie ad Arnauld.
-3 byte grazie a mazzy.
-5 byte grazie alla Veskah.
-6 byte grazie a mazzy.



@mazzy È un trucco intelligente. Dovrò tenerlo a mente, perché ne uso -splitparecchio per ottenere le parole.
AdmBorkBork




9

JavaScript (ES6),  201 194 189 188  187 byte

Salvato 1 byte grazie a @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`)

Provalo online!


JavaScript (ES6), 235 byte

Semplicemente RegPack .

_=>[..."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`)

Provalo online!


8

Bash, 168 160 byte

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 byte

168 byte

Tradotto dall'altra mia risposta in Perl.


7

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

Si scopre che giocare a golf con una sfida di compressione delle stringhe mentre sul telefono si trova il boozer è incredibilmente difficile - chi l'avrebbe mai provato ?!

`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

Provalo

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

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

Puoi "eseguirlo" con xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>.

Sarebbe molto più semplice se XML non fosse così dettagliato, ma il lato positivo è che ha una dimensione inferiore al 25% del testo originale.


5

Retina 0.8.2 , 150 byte


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 

Provalo online! Spiegazione:


THsmile oNflea oNfly oNhair oNwart oNfrog oNbump oNlog iNE

Inserisci l'ultimo verso.

N
$&$'¶TH

Calcola tutti i versetti.

O^$`

Metti i versi nell'ordine corretto.

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

Completa ogni verso e aggiungi il ritornello.

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

Espandi alcuni segnaposto.


5

R , 237 231 byte

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

Provalo online!


5

PHP, 180 178 byte

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

Corri con -nro provalo online .

Rende avvisi in PHP 7.2; Per risolvere il problema, mettere le virgolette intorno
gli elementi dell'array, io, holeei due stand-alone T.


4

C (gcc) , 334 328 307 299 byte

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

Provalo online!



4

Perl 6 , 166 byte

($/=@(($!="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"}

Provalo online!


4

Japt -R , 142 byte

`—¤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

Provalo online!


4

Lotto, 267 byte

@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

tcontiene una stringa ripetuta nel ritornello, scontiene la maggior parte della riga del verso, mentre rsceglie tra in thee on the. Nei versi, sono necessari solo i primi 11 caratteri di t, mentre nella prima riga del chorus la sua seconda copia tha le Tlettere minuscole e la seconda riga del chorus riutilizza gli ultimi 25 caratteri di s.


4

Rubino , 173 170 byte

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}

Provalo online!


4

Haskell , 243 215 byte

Ridotto a 215 byte con il grande aiuto di 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"])

Provalo online!

(La vecchia versione da 243 byte è qui ).

Una soluzione abbastanza semplice.

-- 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
Alcuni consigli: a) lo usi ssolo una volta, così puoi integrarlo. b) sempre anteporre e aggiungere qualcosa t, in modo da poter rendere una funzione (infisso): t#u=t:"here's a "++u. c) costruire la grande lista in funzione lcon map(++" on the ")(words"smile flea ..."è più breve. Inoltre: sposta tutto ciò che viene aggiunto a tale elenco nell'elenco stesso. d) l'elenco dei numeri da rilasciare ora scorre da 8verso il basso 0(numeri a una cifra!) e) ora in linea ianche salvare alcuni byte. f) non è necessario assegnare un nome alla funzione principale. Secondo il nostro meta, i valori di Haskell sono considerati funzioni appropriate, quindi rilascia v=.
nimi

... Tutto sommato 215 byte Provalo online!
nimi

1
Altri 3 byte da salvare: al posto della comprensione dell'elenco è possibile utilizzare >>=(concatMap) dalla lista monade e inline concatin funzione l. Provalo online!
nimi

3

JavaScript (nodo Babele) , 239 byte

-7 byte da @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`
`

Provalo online!


1
Il secondo Tsulla terza riga di ogni verso dovrebbe essere minuscolo.
Shaggy

3

Python 3 , 213 206 198 193 byte

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)

Provalo online!


-15 byte grazie a @Sara
-5 byte grazie solo a @ ASCII

Probabilmente un po 'più golfabile, ma non molto.



@SaraJ Grazie. Ero sotto l'impressione (chiaramente sbagliata) che o=e=avrebbe fatto entrambi oe eriferiti allo stesso oggetto. Ho anche pensato che la divisione sarebbe stata più lunga.
Artemis Fowl,

@ArtemisFowl oe e fai riferimento allo stesso oggetto ... è solo che le stringhe sono immutabili in Python, quindi cose come +=creeranno una nuova copia invece di mutare quella esistente
solo ASCII il


@ ASCII-solo lo so, ma ho pensato che Python in qualche modo si assicurasse che continuassero a riferirsi allo stesso oggetto.
Artemis Fowl,

2

Pulito , 267 byte

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

Provalo online!


2

cQuents , 238 219 byte

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

Provalo online!

Questa sfida mi ha fatto finalmente implementare liste e stringhe nella mia lingua. Questo linguaggio è costruito per sequenze di numeri interi, quindi ha funzionato abbastanza bene!

Spiegazione

:"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 byte

@ ASCII solo rasato 6 byte con letterature letterali e un \ltrucco di cui mi sono dimenticato

$"=" 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/)

Provalo online!



Sì. Bel lavoro. Avrei dovuto ricordare le nuove linee per certo. Ho visto il \lprima, ma non ho mai avuto motivo di usarlo, quindi non ci ho mai pensato.
Xcali




2

Carbone , 115 106 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Modifica: salvato 9 byte copiando il mio codice batch per l'ultima riga del chorus. Spiegazione:

≔There's a holeθ

Salvare la stringa There's a hole, che viene utilizzata due volte così com'è, una terza volta in minuscolo e anche una quarta volta, ma solo i primi 10 caratteri.

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

Dividi la stringa bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile osu xs.

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

Passa sopra i 9 versi, prendendo i primi i+2elementi dell'array, invertendoli, unendoli a loro n thee prefissandoli There's aal risultato.

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

Espandi ogni riga in un verso duplicando la linea e costruendo il ritornello. Ogni riga del verso viene quindi implicitamente stampata su ciascuna riga e ogni versetto è implicitamente separato da una riga vuota.


2

V , 184 170 byte

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ñ

Provalo online!

Spiegazione:

  • 4iThere's a hole in the bottom of the sea<\n><esc> Inserisci "C'è un buco nel fondo del mare" 4 volte.
  • kk Passa alla terza riga
  • y5w copia "C'è un buco"
  • 5eá, inserisci una virgola dopo "C'è un buco"
  • lp incolla dopo la virgola
  • D elimina il resto della riga
  • 5brt minuscola la seconda T
  • Hj4yy copia 4 righe dalla seconda riga
  • Gp Incolla tutto dopo la prima riga
  • 4w8ion the <esc>(alla fine del primo verso) passa al primo "buco" nel secondo verso e inserisci "8 volte"
  • 2briilog <esc> tornare indietro all'ultimo "on", sostituire la o con una i e quindi inserire "log"
  • 3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc> Spostati indietro lungo la linea, inserendo le parole appropriate tra ogni "sul"
  • 7ñ4yykp4wd3wñeseguire 4yykp4wd3w7 volte
    • 4yykp duplicare il verso prima di questo
    • 4wd3w passa alla prima parola dopo "C'è un buco" ed elimina 3 parole
  • 8ñÄ5jñ duplica la prima riga di ogni verso dopo la prima (ce ne sono 8 da fare)

2

/// , 216 byte

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

Provalo online!

Questo tipo di attività è l'unica e l'unica cosa in cui /// è ragionevolmente bravo. : D Ehi, il risultato è più breve di C, C # o Java!

L'output di questo programma termina con due interruzioni di riga finali; spero che non sia un rompicapo.

Comunque, non c'è vera intelligenza qui. Ho semplicemente identificato stringhe ripetute e definito scorciatoie per un carattere per loro, e ripetuto fino a quando non ho più visto stringhe ripetute. L'ho fatto in modo più o meno ingenuo e avido. Tuttavia, ho intenzionalmente definito una scorciatoia per "sorridi sulla pulce sul ... mare", seguita da "pulce al volo sul ... mare" e così via, al fine di formare una catena di scorciatoie . Il risultato è che l'intera sequenza di nuovi nomi è chiaramente visibile nel codice e trovo che sia abbastanza piacevole. :)

Dopo la sostituzione di V e U, abbiamo il seguente codice più leggibile:

/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 caratteri

\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

compila in un bel PDF, con rientri di paragrafo e tutto il resto.

Ungolf e commentato:

\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

Di uscita:

inserisci qui la descrizione dell'immagine


2

C # (compilatore interattivo Visual C #) , 220 byte

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

Provalo online!

-5 byte grazie a @ASCIIOnly e -2 byte grazie a @someone!

Ho un bambino piccolo e posso assicurarti che questa canzone è ugualmente orecchiabile e fastidiosa.


1
Mi dispiace di averti ricordato che esiste: o)
Sok

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


e non è necessario lo spazio successivo inin foreach> _>
ASCII, solo il

@ASCIIOnly - Grazie per i suggerimenti :)
dana,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.