На дне моря дыра

48

Хотя я пытался (и не смог) убедить моего маленького сына съесть его обед, я попытался спеть ему. В середине этой песни я понял, что формульная структура вполне может пригодиться для игры в гольф!

Задача состоит в том, чтобы написать программу или функцию, которая не принимает ввод и создает следующий текст:

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

Правила соревнований:

  • Текст может быть напечатан или возвращен как функция вывода
  • Каждый стих отделяется одной пустой строкой
  • Конечный пробел в порядке, если он не меняет макет (поэтому нет пробелов или лишних пробелов между словами)
  • Конечные переводы строки тоже в порядке.
  • Нет ведущих строк.
  • Все языки приветствуются, и это , поэтому самый короткий ответ в байтах для каждого языка выигрывает!
Sok
источник
6
Похоже на « Там была старая леди» (другие подобные проблемы, например, это были закрыты как дубликаты, хотя я не думаю, что они обязательно должны.)
Джонатан Аллан
6
Хо, ро, гремучее болото, болото в долине.
fəˈnɛt 22:k
4
Для сравнения (хотя и не язык программирования) gzip -5сжимает его до 186 байт ( bzip2и, xzпохоже, работает хуже).
Даниэль Шеплер
2
Поздравляю, от другого родителя разработчика :)
AJFaraday
1
Я хочу адаптировать эту песню к 05AB1E ... "В 5-ой-ой-пчел-одной-ее" есть дыра! "
Волшебная Урна Осьминога

Ответы:

23

СОГЛ , 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
dzaima
источник
14
Но .... но как?
SomeShinyMonica
8
Невероятный. Как даже ...
Остин Берк
1
HNQ бьет снова! : \
Лохматый
4
Не могли бы вы добавить объяснение? Любопытно посмотреть, как это работает.
Кевин Круйссен
@KevinCruijssen добавил
dzaima
19

Stax , 90 87 75 байт

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

Запустите и отладьте его

Распаковано, разглажено и прокомментировано это выглядит так.

`;$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
Не могли бы вы добавить объяснение? Любопытно посмотреть, как это работает.
Кевин Круйссен
Я буду, но у меня все еще есть чувство, что совершенно другой подход будет лучше. После того, как я преуспею или потерплю неудачу в этом, я объясню, что осталось.
рекурсивный
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
Джо Кинг
:), есть также этот вариант, начиная с, There's a seaно он длиннее
Науэль Фуий
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 байт, спасибо Джонатану Аллану
  • -1 байт, спасибо Роду
  • -1 байт, спасибо Эрику Аутгольферу
TFeld
источник
"hole, t%shole\n"%a[1:]сохраняет байт
Джонатан Аллан
Вы можете сохранить байт , опустив почтовый индекс
Rod
@JonathanAllan Спасибо :)
TFeld
@Rod Спасибо, :-)
TFeld
'oi'[s[5]<'n']будет старая альтернатива тоже: Featuring 'io'['g'in s]!
Эрик 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 байт, спасибо Даниилу Шеплеру
-10 байт, спасибо floorcat

Попробуйте онлайн!

Джакомо Гарабелло
источник
2
Не могли бы вы написать ,*b="_TH<0$\31\r"вместо этого?
Даниэль Шеплер
Сохранит ли он какие-либо байты для определения «в»?
OldBunny2800
@ OldBunny2800 нет, это будет дольше ! в этом случае вам нужно как минимум 6 случаев, чтобы быть эффективными ...
Джакомо Гарабелло
12

05AB1E , 103 100 99 97 96 93 92 байта

Сохраненный байт благодаря Кевину Круйссену

“¥ÊˆŽ 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
Emigna
источник
2
Вы можете удалить ведущий õ, потому что, по- видимому, он выводит пустую строку по умолчанию, когда sв стеке ничего не используется . Я не мог найти что-нибудь еще для гольфа; очень хороший ответ!
Кевин Круйссен
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
"}

Попробуйте онлайн!

Кажется, не могу поймать Питона ...

В основном, устанавливает несколько общих строк , чтобы $h, $a, $z, и $b, затем проходит через петлю через каждый из элементов ( hole, log... flea, smile), каждая итерация выводит соответствующий стих. В !$j++середине есть немного логики, чтобы объяснить, что происходит с ключом in/ on. В противном случае все строки просто остаются в конвейере, и по умолчанию Write-Outputмы получаем новые строки бесплатно.

-6 байт благодаря Арно.
-3 байта благодаря маззи.
-5 байт благодаря вескам.
-6 байт благодаря маззи.

AdmBorkBork
источник
-3 байта :) Попробуйте онлайн!
Маззи
@ mazzy Это хитрый трюк. Мне нужно помнить об этом, потому что я использую -splitдовольно много для получения слов.
AdmBorkBork
180 байтов
Веска
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`)

Попробуйте онлайн!

Arnauld
источник
8

Баш, 168 160 байт

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 байт

168 байт

Перевод с моего другого ответа на Perl.

Науэль Фуйе
источник
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% размера исходного текста.

Beefster
источник
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

R , 237 231 байт

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

Попробуйте онлайн!

Кирилл Л.
источник
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, holeи два автономных T.

Titus
источник
4

C (gcc) , 334 328 307 299 байтов

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

Попробуйте онлайн!

cleblanc
источник
265 байт
floorcat
4

Japt -R , 142 байта

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

Попробуйте онлайн!

Оливер
источник
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содержит большую часть строки стиха, в то время как rвыбирает между in theи on the. В стихах tнужны только первые 11 символов , в то время как в первой строке хора вторая копия tимеет Tнижний регистр, а во второй строке хораса используются последние 25 символов s.

Нил
источник
4

Haskell , 243 215 байт

Уменьшено до 215 байт с помощью Ними

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только один раз, чтобы вы могли включить его. б) вы всегда перед именем и Append что - то t, так что вы можете сделать это функция (инфикс): t#u=t:"here's a "++u. в) построение большого списка в функции lс map(++" on the ")(words"smile flea ..."короче. Также: переместите все, что добавлено в этот список, в сам список. d) список номеров, которые нужно удалить, теперь работает 8снизу до 0(однозначные числа!) e) теперь в строке iтакже сохраняются некоторые байты. е) не нужно называть вашу основную функцию. Согласно нашей мета, значения Haskell считаются правильными функциями, поэтому отбросьте v=.
Ними
... Всего 215 байт. Попробуйте онлайн!
Ними
1
Еще 3 байта для сохранения: вместо понимания списка вы можете использовать >>=(concatMap) из монады списка и встроенного concatв функции l. Попробуйте онлайн!
Ними
3

JavaScript (Babel Node) , 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-й строке каждого стиха должно быть в нижнем регистре.
лохматый
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

Возможно, немного более пригодный для игры в гольф, но не намного.

Артемида Фаул
источник
198 байтов
Сара Дж
@SaraJ Спасибо. У меня было (явно ошибочное) впечатление, o=e=что я создаю и то, oи другое, и eссылаюсь на один и тот же объект. Я также думал, что разделение будет дольше.
Артемида Фаул
@ArtemisFowl oи e сделать ссылку на тот же объект ... это просто , что строки являются неизменными в Python , так что - то вроде +=создаст новую копию вместо мутирует существующий один
ASCII-только
193
только ASCII
@ ASCII-только я знаю, но я думал, что python каким-то образом убедился, что они продолжают ссылаться на один и тот же объект.
Артемида Фаул
2

Чисто , 267 байт

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

Попробуйте онлайн!

Οurous
источник
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/)

Попробуйте онлайн!

Xcali
источник
194?
Только для ASCII
Ага. Хорошо сделано. Я должен был вспомнить новые строки наверняка. Я видел это \lраньше, но никогда не имел причин его использовать, поэтому никогда не думал об этом.
Xcali
190?
Только для ASCII
ближе
только 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на xс.

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 'дыра на дне моря" 4 раза.
  • kk Перейти к третьей строке
  • y5w копия "Там дыра"
  • 5eá, вставьте запятую после "Там дыра"
  • lp вставьте после запятой
  • D удалить оставшуюся часть строки
  • 5brt строчная вторая буква Т
  • 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 из них, чтобы сделать)
Beefster
источник
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, с отступами абзаца и все.

Развернулся и прокомментировал:

\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

Из вывода:

введите описание изображения здесь

SHESS
источник
2

C # (интерактивный компилятор Visual C #) , 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!

У меня маленький ребенок, и я могу заверить вас, что эта песня в равной степени броская и раздражающая.

Dana
источник
1
Извините, что напомнил вам, что оно существует: о)
Сок
.Any()-> !=""?
Только для ASCII
также 223
только ASCII
и вам не нужно пробел после inв foreach> _>
ASCII-only
@ASCIIOnly - Спасибо за советы :)
Дана