มีรูที่ก้นทะเล


48

ในขณะที่พยายาม (และล้มเหลว) ชักชวนให้ลูกชายทารกกินอาหารเย็นของฉันฉันพยายามร้องเพลงให้เขา ผ่านกลางเพลงนี้ฉันรู้ว่าโครงสร้าง formulaic อาจให้ยืมตัวเองได้ดีในการตีกอล์ฟ!

ภารกิจคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ไม่รับอินพุตและสร้างข้อความต่อไปนี้:

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

กฏท้าทาย:

  • ข้อความอาจถูกพิมพ์หรือส่งกลับเป็นเอาท์พุทฟังก์ชั่น
  • แต่ละข้อถูกคั่นด้วยบรรทัดว่างหนึ่งบรรทัด
  • ช่องว่างต่อท้ายเป็นเรื่องปกติตราบใดที่ไม่เปลี่ยนเค้าโครง (ดังนั้นจึงไม่มีช่องว่างนำหน้าหรือเว้นวรรคพิเศษระหว่างคำ)
  • ขึ้นบรรทัดใหม่ก็ตกลงเช่นกัน
  • ไม่มีการขึ้นบรรทัดใหม่
  • ยินดีต้อนรับทุกภาษาและนี่คือดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์สำหรับแต่ละภาษาที่ชนะ!

6
คล้ายกับมีหญิงชรา (ความท้าทายที่คล้ายกันอื่น ๆเช่นนี้ถูกปิดเป็นรายการที่ซ้ำกันแม้ว่าฉันไม่คิดว่าพวกเขาควรจะจำเป็น)
Jonathan Allan

6
Ho, ro, บึง rattlin, ชะงักลงในหุบเขา -o
fəˈnɛtɪk

4
สำหรับการเปรียบเทียบ (ไม่ใช่ภาษาการเขียนโปรแกรม) gzip -5บีบอัดมันเป็น 186 ไบต์ ( bzip2และxzดูเหมือนว่าจะแย่ลง)
Daniel Schepler

2
ขอแสดงความยินดีจากผู้พัฒนาหลักคนอื่น :)
AJFaraday

1
ฉันต้องการที่จะปรับเพลงนี้เป็น 05AB1E ... "มีช่องใน oh-five-ay-bee-one-ee!"
Magic Octopus Urn

คำตอบ:


23

SOGL , 103 94 93 ไบต์

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

ลองที่นี่!

...‘                 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
แต่ .... แต่อย่างไร
SomeShinyObject

8
เหลือเชื่อ อย่างไร
Austin Burk

1
HNQ นัดอีกครั้ง! : \
Shaggy

4
คุณจะช่วยเพิ่มคำอธิบายได้ไหม? อยากรู้ว่ามันทำงานอย่างไร
Kevin Cruijssen

@KevinCruijssen ได้เพิ่ม
dzaima

19

Stax , 90 87 75 ไบต์

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

เรียกใช้และแก้ไขข้อบกพร่อง

คลายกล่อง ungolfed และแสดงความคิดเห็นว่ามีลักษณะเช่นนี้

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

เรียกใช้อันนี้


2
คุณจะช่วยเพิ่มคำอธิบายได้ไหม? อยากรู้ว่ามันทำงานอย่างไร
Kevin Cruijssen

ฉันจะ แต่ฉันยังคงรู้สึกว่าวิธีการที่แตกต่างกันโดยสิ้นเชิงจะทำได้ดีกว่า หลังจากฉันประสบความสำเร็จหรือล้มเหลวฉันจะอธิบายสิ่งที่เหลืออยู่
เรียกซ้ำ

1
@KevinCruijssen: ฉันรู้สึกว่ามีวิธีที่ดีกว่ามาก แน่นอนฉันเขียนใหม่ทั้งหมดและบันทึกอีก 12 ไบต์ของการขยายตัว ฉันเพิ่มคำอธิบายบางอย่างเช่นกัน
เรียกซ้ำ

16

Perl 5, 158 154 ไบต์

$_="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 ไบต์

158 ไบต์


5
There's a bottom of the sea. ข้อเท็จจริงตรวจสอบ +1
Jo King

:) นอกจากนี้ยังมีรูปแบบนี้ที่เริ่มต้นด้วยThere's a seaแต่จะนานกว่า
Nahuel Fouilleul

13

Python 2 , 202 190 187 185 183 182 181 ไบต์

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

ลองออนไลน์!

ทางเลือกเก่าถึง'io'['g'in s](13 ไบต์):

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

ที่บันทึกไว้:

  • -1 ไบต์ขอบคุณ Jonathan Allan
  • -1 ไบต์ขอบคุณ Rod
  • -1 ไบต์ขอบคุณ Erik the Outgolfer

"hole, t%shole\n"%a[1:]ประหยัด byte
Jonathan Allan

คุณสามารถบันทึกไบต์ด้วยการปล่อย zip
Rod


@Rod ขอบคุณ :-)
TFeld

'oi'[s[5]<'n']จะเป็นทางเลือกเก่าเช่นกัน: คุณสมบัติ'io'['g'in s]!
Erik the Outgolfer

13

C (gcc) , 261 246 236 ไบต์

#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 bytes, ขอบคุณ Daniel Schepler
-10 bytes, ขอขอบคุณ ceilingcat

ลองออนไลน์!


2
คุณเขียน,*b="_TH<0$\31\r"แทนได้ไหม
Daniel Schepler

มันจะบันทึกไบต์ใด ๆ เพื่อกำหนด "ใน" หรือไม่?
OldBunny2800

@ OldBunny2800 ไม่มันจะนานกว่านี้แล้ว ! ในกรณีนี้คุณต้องมีอย่างน้อย 6 รายการจึงจะมีผล ...
Giacomo Garabello

12

05AB1E , 103 100 99 97 96 93 92 ไบต์

บันทึกเป็นไบต์ด้วยKevin Cruijssen

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

ลองออนไลน์!

คำอธิบาย

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]เริ่มห่วงกว่ารายการ คำถูกบีบอัดโดยใช้พจนานุกรม 05AB1E

ในแต่ละครั้งที่เราทำ:

’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
คุณสามารถลบชั้นนำõเพราะเห็นได้ชัดว่ามันจะออกผลลัพธ์สตริงที่ว่างเปล่าโดยค่าเริ่มต้นเมื่อมีการsเสียค่าใช้จ่ายจะใช้กับอะไรในกอง ฉันไม่สามารถหาอะไรที่จะเล่นกอล์ฟได้อีก คำตอบที่ดีมาก!
Kevin Cruijssen

1
@KevinCruijssen: ใช่แล้วฉันไม่ได้พิจารณาเรื่องนี้เพราะมักจะมีการป้อนข้อมูล ขอบคุณ :)
Emigna

11

PowerShell , 194 188 185 180 174 ไบต์

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

ลองออนไลน์!

ดูเหมือนจะไม่สามารถจับ Python ได้ ...

โดยทั่วไปกำหนดสตริงร่วมกันไม่กี่$h, $a, $zและ$bแล้วผ่านไปห่วงผ่านแต่ละรายการ (a hole, log... flea, smile) แต่ละซ้ำ outputting กลอนที่เหมาะสม มีตรรกะเล็กน้อย!$j++อยู่ตรงกลางในการบัญชีin/ onสวิตช์ที่เกิดขึ้น มิฉะนั้นสตริงทั้งหมดจะถูกทิ้งไว้ที่ไพพ์ไลน์และค่าเริ่มต้นWrite-Outputจะให้บรรทัดใหม่แก่เราฟรี

-6 ไบต์ขอบคุณ Arnauld
-3 ไบต์ต้องขอบคุณ
-5 ไบต์ขอบคุณ Veskah
-6 bytes ขอบคุณที่ mazzy



@ มาซี่นั่นเป็นเคล็ดลับที่ฉลาด ฉันจะต้องจำไว้เสมอเพราะฉันใช้-splitคำศัพท์ไปซักหน่อย
AdmBorkBork




9

JavaScript (ES6),  201 194 189 188  187 ไบต์

บันทึก 1 ไบต์ขอบคุณ @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`)

ลองออนไลน์!


JavaScript (ES6), 235 ไบต์

เพียงแค่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`)

ลองออนไลน์!



7

Japt -Rx, 126 116 113 112 111 109 107 ไบต์

ปรากฎว่าการตีลูกด้วยความท้าทายในการบีบอัดสตริงในขณะที่วางโทรศัพท์ลงบนเครื่องดื่มเหล้าของคุณนั้นยากอย่างไม่น่าเชื่อ

`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

ทดสอบมัน

                                              :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 ไบต์

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

คุณสามารถ "รัน" xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>มันด้วย

มันจะง่ายกว่านี้มากถ้า XML ไม่มีความละเอียดมากนัก แต่ในแง่ที่สดใสขนาดของข้อความต้นฉบับจะน้อยกว่า 25%


5

เรติน่า 0.8.2 , 150 ไบต์


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 

ลองออนไลน์! คำอธิบาย:


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 

ขยายตัวยึดบางตัว



5

PHP, 180 178 ไบต์

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

ทำงานด้วย-nrหรือลองออนไลน์

ให้คำเตือนใน PHP 7.2; แก้ไขใส่คำพูดรอบ
องค์ประกอบอาร์เรย์io, และทั้งสองแบบสแตนด์อโลนholeT





4

แบตช์ 267 ไบต์

@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

tมีสตริงซ้ำในการขับร้องที่sมีมากที่สุดของสายกลอนในขณะที่rChooses ระหว่างและin the on theในโองการเพียง 11 ตัวอักษรแรกของการtเป็นสิ่งจำเป็นในขณะที่สายการขับร้องครั้งแรกสำเนาที่สองของการtมีของTlowercased และสายการขับร้องสอง reuses สุดท้าย 25 sตัวอักษรของ



4

Haskell , 243 215 ไบต์

ลดลงเหลือ 215 ไบต์ด้วยความช่วยเหลือจาก 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"])

ลองออนไลน์!

(รุ่น 243 ไบต์เก่าอยู่ที่นี่ )

ทางออกที่ค่อนข้างตรงไปตรงมา

-- 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
เคล็ดลับ: ก) คุณใช้sเพียงครั้งเดียวเพื่อให้คุณสามารถอินไลน์ได้ ข) คุณมักจะย่อหน้าและสิ่งที่จะผนวกtเพื่อให้คุณสามารถทำให้มันเป็น (มัด) t#u=t:"here's a "++uฟังก์ชั่น: c) การสร้างรายการขนาดใหญ่ในฟังก์ชั่นที่lมีmap(++" on the ")(words"smile flea ..."จะสั้นกว่า นอกจากนี้: ย้ายทุกอย่างที่ผนวกเข้ากับรายการนั้นลงในรายการด้วยตนเอง d) รายการของตัวเลขที่จะดรอปในขณะนี้ทำงานจาก8ลงไปที่0(ตัวเลขหลักเดียว!) e) ตอนนี้การ inline iยังบันทึกบางไบต์ f) ไม่จำเป็นต้องตั้งชื่อฟังก์ชั่นหลักของคุณ ตามที่เมตาของเราค่า Haskell v=มีฟังก์ชั่นที่เหมาะสมการพิจารณาเพื่อวาง
nimi

... ทั้งหมด 215 ไบต์ลองออนไลน์!
nimi

1
อีก 3 ไบต์เพื่อประหยัด: แทนความเข้าใจรายการที่คุณสามารถใช้>>=(concatMap) จาก monad รายการและอินไลน์ในการทำงานconcat ลองออนไลน์! l
nimi

3

JavaScript (โหนดบาเบล) 239 ไบต์

-7 ไบต์จาก @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`
`

ลองออนไลน์!


1
ข้อสองTในบรรทัดที่ 3 ของแต่ละข้อควรเป็นตัวพิมพ์เล็ก
Shaggy

3

Python 3 , 213 206 198 193 ไบต์

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)

ลองออนไลน์!


-15 ไบต์ขอบคุณ @Sara
-5 ไบต์ขอบคุณ @ ASCII-only

น่าจะเป็นสนามกอล์ฟอีกเล็กน้อย แต่ไม่มาก



@SaraJ ขอบคุณ ฉันอยู่ภายใต้การแสดงผล (เข้าใจผิดอย่างชัดเจน) ที่o=e=จะทำให้ทั้งคู่oและeอ้างถึงวัตถุเดียวกัน ฉันก็คิดว่าจะแยกอีกต่อไป
Artemis Fowl

@ArtemisFowl oและe ไม่อ้างถึงวัตถุเดียวกัน ... ก็เพียงว่าสายจะไม่เปลี่ยนรูปในหลามดังนั้นสิ่งที่ต้องการ+=จะสร้างสำเนาใหม่แทนการกลายพันธุ์ที่มีอยู่หนึ่ง
ASCII เท่านั้น


@ ASCII- เพียงฉันเท่านั้นที่รู้ แต่ฉันคิดว่าหลามทำให้แน่ใจว่าพวกเขายังคงอ้างถึงวัตถุเดียวกัน
Artemis Fowl


2

cQuents , 238 219 ไบต์

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

ลองออนไลน์!

ความท้าทายนี้ทำให้ฉันใช้รายการและสายอักขระในภาษาของฉันในที่สุด ภาษานี้ถูกสร้างขึ้นสำหรับลำดับเลขจำนวนเต็มดังนั้นมันค่อนข้างดี!

คำอธิบาย

:"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 ไบต์

@ ASCII เพียงโกน 6 ไบต์ด้วยการขึ้นบรรทัดใหม่ตามตัวอักษรและ\lกลอุบายที่ฉันลืมไป

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

ลองออนไลน์!



ได้. ทำได้ดีมาก ฉันควรจำบรรทัดใหม่สำหรับบางอย่าง ฉันเคยเห็น\lมาก่อน แต่ไม่เคยมีเหตุผลที่จะใช้มันเลยไม่เคยคิดเลย
Xcali


เดียวนี้ไม่ได้ผล ไม่ได้ทำเช่นนี้
ASCII- เท่านั้น


2

ถ่าน , 115 106 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: บันทึก 9 ไบต์โดยคัดลอกรหัสแบทช์ของฉันสำหรับบรรทัดสุดท้ายของคอรัส คำอธิบาย:

≔There's a holeθ

บันทึกสตริงThere's a holeซึ่งจะใช้สองครั้งตามสภาพเป็นครั้งที่สามในกรณีที่ต่ำกว่าและเป็นครั้งที่สี่ แต่เพียง 10 อักขระแรก

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

แยกสตริงbottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile oบนxs

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

วนรอบข้อที่ 9 นำi+2องค์ประกอบแรกของอาร์เรย์กลับรายการรวมเข้าด้วยn theกันและนำหน้าThere's aผลลัพธ์

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

ขยายแต่ละบรรทัดเป็นข้อด้วยการทำซ้ำบรรทัดและสร้างการร้องพร้อมกัน แต่ละบรรทัดของข้อจะถูกพิมพ์โดยปริยายบนแต่ละบรรทัดของตัวเองและแต่ละข้อจะถูกคั่นด้วยบรรทัดว่างโดยปริยาย


2

V , 184 170 ไบต์

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ñ

ลองออนไลน์!

คำอธิบาย:

  • 4iThere's a hole in the bottom of the sea<\n><esc> แทรก "Theres 'a hole ที่ด้านล่างของทะเล" 4 ครั้ง
  • kk ย้ายไปที่บรรทัดที่สาม
  • y5w คัดลอก "มีรู"
  • 5eá, ใส่เครื่องหมายจุลภาคหลังจาก "มีรู"
  • lp วางหลังเครื่องหมายจุลภาค
  • D ลบส่วนที่เหลือของบรรทัด
  • 5brt ตัวพิมพ์เล็กตัวที่สอง T
  • Hj4yy คัดลอก 4 บรรทัดจากบรรทัดที่สอง
  • Gp วางทุกอย่างหลังจากบรรทัดแรก
  • 4w8ion the <esc>(ในตอนท้ายของข้อแรก) ย้ายไปที่ "หลุม" ในข้อที่สองและใส่ "ใน" 8 ครั้ง
  • 2briilog <esc> ย้ายกลับไปที่ "เปิด" ล่าสุดแทนที่ o ด้วย i แล้วใส่ "log"
  • 3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc> เลื่อนไปทางหลังบรรทัดโดยใส่คำที่เหมาะสมระหว่างคำว่า "กับ"
  • 7ñ4yykp4wd3wñรัน4yykp4wd3w7 ครั้ง
    • 4yykp ทำซ้ำข้อก่อนหน้านี้
    • 4wd3w ย้ายไปที่คำแรกหลังจาก "มีรู" และลบ 3 คำ
  • 8ñÄ5jñ ทำซ้ำบรรทัดแรกของแต่ละข้อหลังจากที่หนึ่ง (มี 8 สิ่งที่ต้องทำ)

2

/// , 216 ไบต์

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

ลองออนไลน์!

งานประเภทนี้เป็นสิ่งเดียวที่ /// ดีพอสมควร : D เฮ้ผลที่ได้จะสั้นกว่า C, C # หรือ Java!

เอาต์พุตจากโปรแกรมนี้สิ้นสุดในการแบ่งบรรทัดสองครั้ง หวังว่านั่นจะไม่ใช่ตัวจัดการ

อย่างไรก็ตามไม่มีความฉลาดจริงที่นี่ ฉันเพียงแค่ระบุสตริงซ้ำและกำหนดทางลัดหนึ่งตัวละครสำหรับพวกเขาและทำซ้ำจนกว่าฉันจะไม่เห็นสตริงซ้ำอีก ฉันทำสิ่งนี้ในแบบไร้เดียงสาและโลภมากขึ้นหรือน้อยลง อย่างไรก็ตามฉันตั้งใจกำหนดทางลัดสำหรับ "รอยยิ้มบนหมัดบน ... ทะเล" ตามด้วย "หมัดบนแมลงวันบน ... ทะเล" และอื่น ๆ เพื่อสร้างห่วงโซ่ทางลัด . ผลที่ได้คือลำดับทั้งหมดของคำนามใหม่สามารถมองเห็นได้อย่างชัดเจนในโค้ดและฉันพบว่าน่าพอใจมาก :)

หลังจาก V และ U ถูกแทนที่แล้วเรามีโค้ดที่อ่านง่ายขึ้นดังต่อไปนี้:

/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ตัวอักษร

\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

รวบรวมเป็น PDF ที่ดีพร้อมการเยื้องย่อหน้าและทุกอย่าง

Ungolfed และแสดงความคิดเห็น:

\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

ของเอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


2

C # (Visual C # Interactive Compiler) , 220 ไบต์

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

ลองออนไลน์!

-5 ไบต์ขอบคุณ @ASCIIOnly และ -2 ไบต์ขอบคุณ @someone!

ฉันมีลูกตัวเล็ก ๆ และสามารถรับรองได้ว่าเพลงนี้มีส่วนที่น่าดึงดูดและน่ารำคาญ


1
ฉันขอโทษที่เตือนคุณว่ามีอยู่: o)
Sok



และคุณไม่ต้องการช่องว่างหลังจากinในforeach> _>
ASCII เท่านั้นเท่านั้น

@ ASCIIOnly - ขอบคุณสำหรับเคล็ดลับ :)
dana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.