海底に穴が開いています


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

チャレンジルール:

  • テキストは印刷されるか、関数出力として返されます。
  • 各詩は単一の空行で区切られています
  • レイアウトを変更しない限り、末尾の空白は問題ありません(したがって、先頭の空白や単語間の余分なスペースはありません)
  • 末尾の改行も問題ありません。
  • 主要な改行はありません。
  • すべての言語が歓迎され、これはなので、各言語のバイト単位の最短回答が勝ちます!

6
同様に旧レディーがあった(他の類似の課題は、これは、例えば、私は、彼らが必ずしもすべきとは思いませんが、重複としてクローズされている。)
ジョナサン・アラン

6
Ho、ro、rattlin '沼地、谷oの沼地。
fəˈnɛtɪk

4
(プログラミング言語ではありませんが)比較のために、gzip -5それを186バイトに圧縮します(そしてbzip2xzさらに悪くなるようです)。
ダニエルシェプラー

2
おめでとう、別の開発者の親から:)
AJFaraday

1
私はこの歌を05AB1Eに適合させたいと思います...「oh-five-ay-bee-one-eeに穴がある!」
マジックタコOct

回答:


23

SOGL103 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
すごい。どのように
オースティンバーク

1
HNQが再び攻撃します!:\
シャギー

4
説明を追加してもいいですか?それがどのように機能するか興味があります。
ケビンクルーッセン

@KevinCruijssenが追加されました
dzaima

19

スタックス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バイトの膨張を節約しました。説明も追加しました。
再帰的な


13

パイソン2202の 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バイト、Erik the Outgolferのおかげ

"hole, t%shole\n"%a[1:]バイトを節約する
ジョナサンアラン

zipをドロップすることで1バイト保存できます
Rod

@JonathanAllanありがとう:)
TFeld

@Rodありがとう、:-)
TFeld

'oi'[s[5]<'n']も古い選択肢になります:特徴'io'['g'in s]
アウトゴルファーのエリック

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バイト

オンラインでお試しください!


2
,*b="_TH<0$\31\r"代わりに書くことができますか?
ダニエルシェプラー

「in」を定義するためにバイトを保存しますか?
OldBunny2800

@ OldBunny2800いいえ、もっと長くなります!この場合、有効にするには少なくとも6回発生する必要があります...
Giacomo Garabello

12

05AB1E103 100 99 97 96 93 92バイト

Kevin Cruijssenのおかげで1バイト節約

“¥ÊˆŽ 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
スタック上で何も使用せずにwapを使用すると、デフォルトで空の文字列が出力されるõため、先頭を削除できます。ゴルフの他に何も見つかりませんでした。とてもいい答えです!s
ケビンクルーイッセン

1
@KevinCruijssen:ええ、通常入力があるので、私はそれを考慮しませんでした。ありがとう:)
エミグナ

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、その後(の各項目をループを通過しholelog...、 、flea)、smile各反復は、適切な詩を出力します。発生!$j++するin/ onスイッチを説明するために、中央に少しロジックがあります。それ以外の場合、すべての文字列はパイプラインに残され、デフォルトでWrite-Outputは改行が無料で提供されます。

Arnauldのおかげで-6バイト。
mazzyのおかげで-3バイト。
Veskahのおかげで-5バイト。
mazzyのおかげで-6バイト。



@mazzyそれは賢いトリックです。私は-split言葉を得るためにかなりの時間を費やしているので、それを覚えておく必要があります。
AdmBorkBork




9

JavaScript(ES6)、 201 194 189 188  187バイト

@Shaggyのおかげで1バイト節約

_=>`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 -Rx126の 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

Retina 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で警告を出します。修正するには
、配列要素ioholeおよび2つのスタンドアロンを引用符で囲みTます。





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ます。節では、唯一の最初の11の文字がt最初のコーラスライン内の第2のコピーをしながら、必要とされるtそのいるT小文字及び第二コーラス線の最後の25個の文字を再利用しますs



4

Haskell243 215バイト

nimiの大きな助けにより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
いくつかのヒント:a)s一度しか使用しないので、インライン化できます。b)に常に何かを追加して追加tするので、それを(中置)関数にすることができますt#u=t:"here's a "++u。c)関数lで大きなリストを作成するmap(++" on the ")(words"smile flea ..."方が短い。また、そのリストに追加されたすべてをリスト自体に移動します。d)ドロップする数字のリストは、8下から0(1桁の数字!)まで実行されます。e)インライン化iもいくつかのバイトを節約します。f)メイン関数に名前を付ける必要はありません。メタによると、Haskellの値は適切な関数と見なされるため、を削除しv=ます。
nimi


1
保存する別の3バイト:リスト内包表記の代わりに>>=、リストモナドから(concatMap)を使用して、インラインconcatでfunctionを使用できますlオンラインでお試しください!
nimi

3

JavaScript(Babelノード)、239バイト

@Oliverから-7バイト *.*

(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行目の2番目は小文字にする必要があります。
シャギー

3

Pythonの3213の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)

オンラインでお試しください!


@Saraのおかげで-15バイト@ASCII
のみのおかげで-5バイト

おそらくもう少しゴルフ可能ですが、それほど多くはありません。



@SaraJありがとう。私は、o=e=両方oを作りe、同じオブジェクトを参照するという印象(明らかに誤った)を受けていました。また、分割が長くなると思いました。
アルテミスファウル

@ArtemisFowl oとはe ないようなものがそう、それは文字列はPythonで不変であることだけだ...同じオブジェクトを参照する+=新しいコピーを作成する代わりに、既存の変異ます
ASCIIのみ


@ASCIIのみは知っていますが、Pythonが何らかの形で同じオブジェクトを参照し続けていることを確認したと思いました。
アルテミスファウル


2

cQuents238 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のみは、リテラルの改行と\l忘れていたトリックで6バイトを削りました

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




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。これはそのまま2回使用され、3回目は小文字で、4回目も最初の10文字だけが使用されます。

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

sで文字列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

V184 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> 「海底に穴がある」を4回挿入します。
  • kk 3行目に移動する
  • y5w コピー「穴があります」
  • 5eá, 「穴があります」の後にコンマを挿入します
  • lp コンマの後に貼り付けます
  • D 行の残りを削除する
  • 5brt 2番目のTを小文字にする
  • Hj4yy 2行目から4行をコピーします
  • Gp 最初の行の後にすべてを貼り付けます
  • 4w8ion the <esc>(最初の詩の終わりに)2番目の詩の最初の「穴」に移動し、「に」を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よりも短いです!

このプログラムからの出力は、2つの末尾の改行で終了します。それが契約を壊すものではないことを願っています。

とにかく、ここには本当の賢さはありません。繰り返し文字列を特定し、それらの1文字のショートカットを定義し、繰り返し文字列が表示されなくなるまで繰り返しました。多かれ少なかれ素朴で貪欲なやり方でこれをやった。ただし、ショートカットのチェーンを形成するために、「...海のノミを笑顔にする」ためのショートカットを意図的に定義し、その後「...海のオンザフライを実行する」などを続けました。 。その結果、新しい名詞のシーケンス全体がコード内ではっきりと見えるようになり、私はそれがかなり楽しいと感じています。:)

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

出力の:

ここに画像の説明を入力してください


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

オンラインでお試しください!

@ASCIIOnlyのおかげで-5バイト、@ someoneのおかげで-2バイト!

私には小さな子供がいますが、この歌は同じ部分がキャッチーで迷惑なことを保証できます。


1
存在することを思い出してすみません:o)
ソク

.Any()-> !=""
ASCIIのみ


あなたは後にスペースを必要としないinforeach> _>
ASCIIのみの

@ASCIIOnly-ヒントをありがとう:)
dana
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.