Ada lubang di dasar laut

48

Sementara berusaha (dan gagal) telah membujuk putra bayi saya untuk makan malam, saya mencoba menyanyi untuknya. Pertengahan jalan melalui lagu ini saya menyadari struktur formula mungkin cocok untuk kode golf!

Tugasnya adalah menulis program atau fungsi yang tidak menerima input dan menghasilkan teks berikut:

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

Aturan tantangan:

  • Teks dapat dicetak atau dikembalikan sebagai keluaran fungsi
  • Setiap ayat dipisahkan oleh satu baris kosong
  • Trailing whitespace OK selama tidak mengubah tata letak (jadi tidak ada spasi putih terkemuka atau spasi ekstra di antara kata-kata)
  • Mengejar baris baru juga OK.
  • Tidak ada baris baru.
  • Semua bahasa disambut, dan ini adalah , jadi jawaban terpendek dalam byte untuk setiap bahasa menang!
Sok
sumber
6
Mirip dengan There Was Old Lady (tantangan serupa lainnya misalnya ini telah ditutup sebagai duplikat, meskipun saya pikir mereka tidak seharusnya melakukannya.)
Jonathan Allan
6
Ho, ro, rattlin 'rog, rawa di lembah-o.
fəˈnɛtɪk
4
Sebagai perbandingan (meskipun bukan bahasa pemrograman) gzip -5kompres ke 186 byte (dan bzip2dan xztampaknya lebih buruk).
Daniel Schepler
2
Selamat, dari induk pengembang lain :)
AJFaraday
1
Saya ingin mengadaptasi lagu ini menjadi 05AB1E ... "Ada lubang di oh-five-ay-bee-one-ee!"
Guci Gurita Ajaib

Jawaban:

23

SOGL , 103 94 93 byte

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

Coba di sini!

...‘                 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
dzaima
sumber
14
Tapi .... tapi bagaimana caranya?
SomeShinyObject
8
Luar biasa. How even--
Austin Burk
1
HNQ menyerang lagi! : \
Shaggy
4
Maukah Anda menambahkan penjelasan? Penasaran ingin melihat cara kerjanya.
Kevin Cruijssen
@KevinCruijssen menambahkan
dzaima
19

Stax , 90 87 75 byte

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

Jalankan dan debug itu

Membongkar, tidak diserang, dan berkomentar sepertinya ini.

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

Jalankan yang ini

rekursif
sumber
2
Maukah Anda menambahkan penjelasan? Penasaran ingin melihat cara kerjanya.
Kevin Cruijssen
Saya akan tetapi saya masih merasa bahwa pendekatan yang sama sekali berbeda akan lebih baik. Setelah saya berhasil atau gagal dalam hal itu saya akan menjelaskan apa yang tersisa.
Rekursif
1
@KevinCruijssen: Saya merasa ada pendekatan yang jauh lebih baik. Benar saja, saya benar-benar menulis ulang, dan menyelamatkan 12 byte dari mengasapi. Saya menambahkan beberapa penjelasan juga.
Rekursif
16

Perl 5, 158 154 byte

$_="There's a bottom of the sea
";for$,(<{{hole,log}" i",{bump,frog,wart,hair,fly,flea,smile}" o"}>){s/a/a $,n the/;say$_.$_.($t||=s/.{14}/$&, \l$&
$&/r)}

154 byte

158 byte

Nahuel Fouilleul
sumber
5
There's a bottom of the sea. Fakta-fakta memeriksa, +1
Jo King
:), ada juga variasi ini dimulai dengan There's a seatetapi lebih lama
Nahuel Fouilleul
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:]

Cobalah online!

Alternatif lama 'io'['g'in s](13 byte):

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

Disimpan:

  • -1 byte, terima kasih kepada Jonathan Allan
  • -1 byte, terima kasih kepada Rod
  • -1 byte, terima kasih kepada Erik the Outgolfer
TFeld
sumber
"hole, t%shole\n"%a[1:]menghemat satu byte
Jonathan Allan
Anda dapat menyimpan byte dengan menjatuhkan zip
Rod
@JonathanAllan Terima kasih :)
TFeld
@Rod Terima kasih, :-)
TFeld
'oi'[s[5]<'n']akan menjadi alternatif lama juga: Menampilkan '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, Terima kasih kepada Daniel Schepler
-10 byte, Terima kasih untuk ceilingcat

Cobalah online!

Giacomo Garabello
sumber
2
Bisakah Anda menulis ,*b="_TH<0$\31\r"sebagai gantinya?
Daniel Schepler
Apakah itu akan menyimpan byte untuk mendefinisikan "di"?
OldBunny2800
@ OldBunny2800 tidak, itu akan lebih lama ! dalam hal ini Anda memerlukan setidaknya 6 kejadian agar efektif ...
Giacomo Garabello
12

05AB1E , 103 100 99 97 96 93 92 byte

Menyimpan satu byte berkat Kevin Cruijssen

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

Cobalah online!

Penjelasan

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#vmulai loop di atas daftar ["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]. Kata-kata tersebut dikompres menggunakan kamus 05AB1E.

Pada masing-masing kita lakukan:

’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
Emigna
sumber
2
Anda dapat menghapus yang pertama õ, karena tampaknya itu mengeluarkan string kosong secara default ketika swap digunakan dengan apa pun di stack . Saya tidak dapat menemukan hal lain untuk bermain golf; jawaban yang sangat bagus!
Kevin Cruijssen
1
@KevinCruijssen: Oh yeah, saya tidak menganggap itu karena biasanya ada input. Terima kasih :)
Emigna
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
"}

Cobalah online!

Sepertinya tidak bisa menangkap Python ...

Pada dasarnya, menetapkan beberapa string umum untuk $h, $a, $z, dan $b, kemudian pergi melalui loop melalui masing-masing item ( hole, log, ... flea, smile), setiap iterasi keluaran ayat yang sesuai. Ada sedikit logika dengan !$j++di tengah untuk memperhitungkan in/ onswitch yang terjadi. Kalau tidak, semua string dibiarkan begitu saja di pipeline, dan defaultnya Write-Outputmemberi kita baris baru secara gratis.

-6 byte terima kasih kepada Arnauld.
-3 byte berkat mazzy.
-5 byte berkat Veskah.
-6 byte berkat mazzy.

AdmBorkBork
sumber
-3 byte :) Cobalah secara online!
mazzy
@ Mazzy Itu trik yang pintar. Saya harus mengingatnya, karena saya menggunakan -splitsedikit untuk mendapatkan kata-kata.
AdmBorkBork
180 byte
Veskah
9

JavaScript (ES6),  201 194 189 188  187 byte

Disimpan 1 byte berkat @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`)

Cobalah online!


JavaScript (ES6), 235 byte

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

Cobalah online!

Arnauld
sumber
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

Diterjemahkan dari jawaban saya yang lain di Perl.

Nahuel Fouilleul
sumber
7

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

Ternyata golf tantangan kompresi string saat di ponsel Anda ke bawah boozer sangat sulit - siapa yang pernah dipukul ?!

`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

Menguji

                                              :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
Shaggy
sumber
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>

Anda dapat "mengeksekusi" dengan xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>.

Ini akan jauh lebih mudah jika XML tidak begitu bertele-tele, tetapi sisi baiknya, ini kurang dari 25% ukuran teks asli.

Beefster
sumber
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 

Cobalah online! Penjelasan:


THsmile oNflea oNfly oNhair oNwart oNfrog oNbump oNlog iNE

Masukkan ayat terakhir.

N
$&$'¶TH

Hitung semua ayat.

O^$`

Letakkan ayat-ayat itu dalam urutan yang benar.

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

Lengkapi setiap ayat dan tambahkan paduan suara.

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

Perluas beberapa penampung.

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

Cobalah online!

Kirill L.
sumber
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
";

Jalankan dengan -nratau coba online .

Menghasilkan peringatan di PHP 7.2; untuk memperbaiki, beri tanda kutip di sekitar
elemen array io,, holedan keduanya standalone T.

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

Cobalah online!

Cleblanc
sumber
265 byte
ceilingcat
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"}

Cobalah online!

Jo King
sumber
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

Cobalah online!

Oliver
sumber
4

Batch, 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

tberisi string yang diulang dalam paduan suara, sberisi sebagian besar baris ayat, sementara rmemilih antara in thedan on the. Dalam ayat tersebut, hanya 11 karakter pertama tyang diperlukan, sedangkan di baris chorus pertama salinan kedua tmemiliki Thuruf lebih rendah dan baris chorus kedua menggunakan kembali 25 karakter terakhir s.

Neil
sumber
4

Ruby , 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}

Cobalah online!

Level River St
sumber
4

Haskell , 243 215 byte

Dikurangi menjadi 215 byte dengan bantuan besar dari 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"])

Cobalah online!

(Versi 243 byte lama ada di sini ).

Solusi yang cukup mudah.

-- 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"]
    )
Max Yekhlakov
sumber
1
Beberapa tips: a) Anda shanya menggunakan satu kali, jadi Anda bisa memasukkannya. b) Anda selalu tambahkan dan append sesuatu untuk t, sehingga Anda dapat membuat sebuah (infix) fungsi: t#u=t:"here's a "++u. c) membuat daftar besar berfungsi ldengan map(++" on the ")(words"smile flea ..."lebih pendek. Juga: pindahkan semua yang ditambahkan ke daftar itu ke dalam daftar itu sendiri. d) daftar angka untuk dijatuhkan sekarang berjalan dari 8bawah ke 0(angka satu digit!) e) sekarang inlining ijuga menghemat beberapa byte. f) tidak perlu menyebutkan fungsi utama Anda. Menurut meta kami, nilai Haskell dianggap fungsi yang tepat, jadi jatuhkan v=.
nimi
... Semua dalam semua 215 byte Cobalah secara online!
nimi
1
3 byte lain untuk disimpan: alih-alih pemahaman daftar, Anda dapat menggunakan >>=(concatMap) dari daftar monad dan inline concatin function l. Cobalah online!
nimi
3

JavaScript (Babel Node) , 239 byte

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

Cobalah online!

Luis felipe De jesus Munoz
sumber
1
TBaris kedua pada baris ke-3 dari setiap ayat harus menggunakan huruf kecil.
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)

Cobalah online!


-15 byte terima kasih kepada @Sara
-5 byte terima kasih hanya untuk @ ASCII

Mungkin sedikit lebih golf, tetapi tidak banyak.

Artemis Fowl
sumber
198 byte
Sara J
@SaraJ Terima kasih. Saya berada di bawah kesan (jelas keliru) yang o=e=akan membuat keduanya odan emerujuk ke objek yang sama. Saya juga berpikir perpecahan akan lebih lama.
Artemis Fowl
@ArtemisFowl odan e jangan mengacu pada objek yang sama ... hanya saja string yang berubah dengan Python sehingga hal-hal seperti +=akan membuat salinan baru bukan bermutasi yang ada satu
ASCII-satunya
193
ASCII
@ ASCII-hanya saya yang tahu, tapi saya pikir python itu entah bagaimana memastikan bahwa mereka terus merujuk ke objek yang sama.
Artemis Fowl
2

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

Cobalah online!

Suram
sumber
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"

Cobalah online!

Tantangan ini akhirnya membuat saya menerapkan daftar dan string dalam bahasa saya. Bahasa ini dibangun untuk sekuens integer, jadi itu cukup baik!

Penjelasan

:"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
Stephen
sumber
2

Perl 5 , 194 byte

@ ASCII-only mencukur 6 byte dengan baris baru literal dan \ltrik yang saya lupa

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

Cobalah online!

Xcali
sumber
194?
ASCII
Ya. Kerja bagus. Seharusnya aku ingat baris-baris baru itu dengan pasti. Saya pernah melihat \lsebelumnya, tetapi tidak pernah punya alasan untuk menggunakannya, jadi tidak pernah memikirkannya.
Xcali
190?
ASCII
lebih dekat
ASCII-satunya
2

Arang , 115 106 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 9 byte dengan menyalin kode Batch saya untuk baris terakhir paduan suara. Penjelasan:

≔There's a holeθ

Simpan string There's a hole, yang digunakan dua kali apa adanya, ketiga kalinya dalam huruf kecil, dan juga yang keempat tetapi hanya 10 karakter pertama.

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

Pisahkan string bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile opada xs.

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

Ulangi 9 ayat, ambil i+2elemen pertama dari array, balikkan, gabungkan n the, dan awali There's ahasilnya.

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

Rentangkan setiap baris menjadi sebuah ayat dengan menduplikasi baris dan membuat chorus. Setiap baris ayat kemudian dicetak secara implisit pada setiap barisnya sendiri, dan setiap ayat secara implisit dipisahkan oleh baris kosong.

Neil
sumber
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ñ

Cobalah online!

Penjelasan:

  • 4iThere's a hole in the bottom of the sea<\n><esc> Masukkan "Ada lubang di dasar laut" 4 kali.
  • kk Pindah ke baris ketiga
  • y5w salin "Ada lubang"
  • 5eá, masukkan koma setelah "Ada lubang"
  • lp rekatkan setelah koma
  • D hapus sisa baris
  • 5brt huruf kecil T kedua
  • Hj4yy salin 4 baris dari baris kedua
  • Gp Rekatkan semuanya setelah baris pertama
  • 4w8ion the <esc>(di akhir ayat pertama) pindah ke "lubang" pertama di ayat kedua dan masukkan "pada" 8 kali
  • 2briilog <esc> bergerak mundur ke "on" terakhir, ganti o dengan i dan kemudian masukkan "log"
  • 3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc> Pindah mundur melewati garis, masukkan kata-kata yang tepat di antara masing-masing "pada"
  • 7ñ4yykp4wd3wñjalankan 4yykp4wd3w7 kali
    • 4yykp duplikat ayat sebelum yang ini
    • 4wd3w pindah ke kata pertama setelah "Ada lubang" dan hapus 3 kata
  • 8ñÄ5jñ duplikat baris pertama dari setiap ayat setelah yang pertama (ada 8 di antaranya untuk dilakukan)
Beefster
sumber
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

Cobalah online!

Tugas semacam ini adalah satu-satunya hal yang /// cukup bagus. : D Hei, hasilnya lebih pendek dari C, C # atau Java!

Output dari program ini berakhir dengan dua jeda trailing line; berharap itu bukan pemecah kesepakatan.

Bagaimanapun, tidak ada kepintaran nyata di sini. Saya hanya mengidentifikasi string yang berulang dan menetapkan pintasan satu karakter untuk mereka, dan mengulangi sampai saya tidak melihat string yang berulang lagi. Saya melakukan ini dengan cara yang kurang lebih naif dan serakah. Namun, saya sengaja mendefinisikan jalan pintas untuk "senyum pada kutu di ... laut", diikuti oleh "kutu on the fly di ... laut", dan sebagainya, untuk membentuk rantai pintasan . Hasilnya adalah seluruh urutan kata benda baru terlihat jelas dalam kode, dan menurut saya itu cukup menyenangkan. :)

Setelah V dan U diganti, kami memiliki kode yang lebih mudah dibaca berikut:

/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
Tanner Swett
sumber
2

LaTeX, 265 268 karakter

\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

mengkompilasi ke dalam PDF yang bagus, dengan lekukan paragraf dan segalanya.

Tidak dikumpulkan dan berkomentar:

\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

Output:

masukkan deskripsi gambar di sini

sheß
sumber
2

C # (Visual C # Interactive Compiler) , 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);

Cobalah online!

-5 byte terima kasih kepada @ASCIIOnly dan -2 byte terima kasih kepada @someone!

Saya memiliki anak kecil dan dapat meyakinkan Anda bahwa lagu ini adalah bagian yang sama menarik dan menyebalkan.

dana
sumber
1
Saya menyesal telah mengingatkan Anda bahwa itu ada: o)
Sok
.Any()-> !=""?
ASCII
juga 223
ASCII
dan Anda tidak perlu ruang setelah indi foreach> _>
ASCII-satunya
@ASCIIHanya - Terima kasih atas tipsnya :)
dana