Denizin dibinde bir delik var.


48

Denemek (ve başarısız olmak) küçük oğlumu akşam yemeğini yemeye ikna ederken, ben de ona şarkı söylemeye çalıştım. Bu şarkının tam ortasındaki formül yapısının golf oynamak için iyi bir ödünç verebileceğini fark ettim!

Görev, girdi kabul etmeyen ve aşağıdaki metni üreten bir program veya işlev yazmaktır:

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

Meydan okuma kuralları:

  • Metin, işlev çıktısı olarak yazdırılabilir veya döndürülebilir
  • Her ayet tek bir boş satırla ayrılır
  • İzleyen boşluk boşluğu, mizanpajı değiştirmediği sürece tamamdır (yani baştaki boşluk veya kelimeler arasında boşluk olmaz)
  • İzleyen yeni satırlar da sorun değil.
  • Baştaki yeni hat yok.
  • Tüm diller memnuniyetle karşılanır ve bu , bu nedenle her dil için bayt cinsinden en kısa cevap kazanır!

6
Benzer için bir yaşlı kadın oldu (diğer benzer sorunlar bu eg ı mutlaka gerektiği sanmıyorum rağmen, birbirinin aynısı gibi kapatıldı.)
Jonathan Allan

6
Ho, ro, çıngıraklı bataklık, vadideki bataklık.
f Jannɛtɪk

4
Karşılaştırma için (gerçi değil bir programlama dili) gzip -5186 bayt sıkıştırır (ve bzip2ve xzdaha kötü yapmak gibi).
Daniel Schepler,

2
Tebrikler, başka bir geliştirici
üstünden

1
Bu şarkıyı 05AB1E'ye uyarlamak istiyorum ... "oh-five-ay-bee-one-ee'de bir delik var!"
Magic Octopus Urn

Yanıtlar:


23

SOGL , 103 94 93 bayt

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

Burada dene!

...‘                 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
Ama .... ama nasıl?
SomeShinyObject

8
İnanılmaz. Nasıl olsa--
Austin Burk,

1
HNQ tekrar grev! : \
Shaggy

4
Bir açıklama ekler misiniz? Nasıl çalıştığını görmek için merak ediyorum.
Kevin Cruijssen

@KevinCruijssen eklendi
dzaima

19

Stax , 90 87 75 bayt

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

Koş ve hata ayıkla

Unpacked, unungolfed ve yorumuna benzer.

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

Bunu çalıştır


2
Bir açıklama ekler misiniz? Nasıl çalıştığını görmek için merak ediyorum.
Kevin Cruijssen

Yapacağım ama hala tamamen farklı bir yaklaşımın daha iyi olacağı hissine sahibim. Başarılı veya başarısız olduktan sonra geriye kalanları açıklayacağım.
yinelemeli

1
@KevinCruijssen: Çok daha iyi bir yaklaşım olduğunu hissediyorum. Tabii ki, tamamen yeniden yazdım ve 12 baytlık bir damla daha su biriktirdim. Ben de bazı açıklamalar ekledim.
özyinelemeli

16

Perl 5, 158 154 bayt

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

158 bayt


5
There's a bottom of the sea. Gerçekler kontrol +1
Jo King

:), bununla başlayan bir varyasyon da var There's a seaama daha uzun
Nahuel Fouilleul

13

Python 2 , 202 190 187 185 183 182 181 bayt

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

Çevrimiçi deneyin!

Eski alternatifler 'io'['g'in s](13 bayt):

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

Kaydedilen:

  • -1 bayt, Jonathan Allan sayesinde
  • Rod sayesinde -1 bayt
  • -1 bayt, Outgolfer Erik sayesinde

"hole, t%shole\n"%a[1:]bir bayt kazandırır
Jonathan Allan

Şunları yapabilirsiniz Bir byte kaydetmek zip bırakarak
Rod


@Rod Thanks, :-)
Ocak'ta TFeld

'oi'[s[5]<'n']çok eski bir alternatif olacaktır: Featuring 'io'['g'in s]!
Outgolfer Erik,

13

C (gcc) , 261 246 236 bayt

#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 bayt, Daniel Schepler
sayesinde -10 bayt, ceilingcat sayesinde

Çevrimiçi deneyin!


2
Onun ,*b="_TH<0$\31\r"yerine yazabilir misin?
Daniel Schepler,

"İçinde" tanımlamak için herhangi bir bayt kaydeder mi?
OldBunny2800

@ OldBunny2800 hayır, daha uzun olurdu ! Bu durumda etkili olabilmen için en az 6
seneye

12

05AB1E , 103 100 99 97 96 93 92 bayt

Kevin Cruijssen sayesinde bir bayt kaydedildi

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

Çevrimiçi deneyin!

açıklama

“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#vListede bir döngü başlatır ["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]. Sözcükler 05AB1E sözlüğü kullanılarak sıkıştırılmıştır.

Her yaptığımız:

’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
Başta kaldırabilirsiniz õ, çünkü görünüşte bir swap yığında hiçbir şey kullanılmadığında varsayılan olarak boş bir dize çıkarır . Golf oynamak için başka bir şey bulamadım; çok güzel cevap!
Kevin Cruijssen

1
@KevinCruijssen: Ah evet, genelde girdi olduğu gibi düşünmedim. Thanks :)
Emigna

11

PowerShell , 194 188 185 180 174 bayt

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

Çevrimiçi deneyin!

Python'u yakalayacak gibi görünmüyorum ...

Temel olarak, birkaç ortak dizeleri setleri $h, $a, $zve $böğelerin her birinin içinden bir döngü içinde, sonra gider ( hole, log, ... flea, smile), uygun ayet çıkışının her yineleme. Ortaya !$j++çıkan in/ onanahtarını hesaba katacak ortada biraz mantık var . Aksi takdirde, tüm dizeler sadece boru hattında bırakılır ve varsayılan Write-Outputayar bize ücretsiz yeni satırlar verir.

Arnauld sayesinde -6 bayt.
Mazzy sayesinde -3 bayt.
Veskah sayesinde -5 bayt.
-Mazzy sayesinde 6 bayt.



@mazzy Bu akıllıca bir numara. Bunu aklımda tutmam gerekecek, çünkü -splitkelimeleri almak için biraz kullanıyorum .
AdmBorkBork




9

JavaScript (ES6),  201 194 189 188  187 bayt

@Shaggy sayesinde 1 bayt kaydedildi

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

Çevrimiçi deneyin!


JavaScript (ES6), 235 bayt

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

Çevrimiçi deneyin!


8

Bash, 168 160 bayt

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 bayt

168 bayt

Perl'deki diğer cevabımdan çevrildi.


7

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

Görünen o ki, telefondaki içkiyi düşürmek zor olsa da, bir ip sıkıştırma zorluğuyla golf oynamanın, kim thunk olurdu ?!

`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

Dene

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

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

İle "yürütebilir" xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>.

XML çok ayrıntılı olmasaydı, bu çok daha kolay olurdu, ama parlak tarafta, orijinal metnin boyutunun% 25'inden azdı.


5

Retina 0.8.2 , 150 bayt


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 

Çevrimiçi deneyin! Açıklama:


THsmile oNflea oNfly oNhair oNwart oNfrog oNbump oNlog iNE

Son ayeti yerleştirin.

N
$&$'¶TH

Tüm ayetleri hesapla.

O^$`

Ayetleri doğru sırayla yerleştirin.

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

Her ayeti tamamlayın ve korosu ekleyin.

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

Bazı yer tutucuları genişletin.


5

R , 237 231 bayt

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

Çevrimiçi deneyin!


5

PHP, 180 178 bayt

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

Çevrimiçi olarak çalıştırın -nrveya deneyin .

PHP 7.2'de uyarı verir; Düzeltme için, tırnak koymak
dizi öğelerinin, io, holeve iki bağımsız T.


4

C (gcc) , 334 328 307 299 bayt

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

Çevrimiçi deneyin!



4

Perl 6 , 166 bayt

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

Çevrimiçi deneyin!


4

Japt -R , 142 bayt

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

Çevrimiçi deneyin!


4

Toplu iş, 267 bayt

@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

tkoroda tekrarlanan bir dize siçerir, ve rarasında seçim yaparken ayet çizgisinin çoğunu içerir . Ayetlerinde sadece ilk 11 karakter ilk koro hattında ikinci kopyası ise, ihtiyaç duyulan onun etmiştir küçük harfli ve ikinci koro son 25 karakterleri yeniden .in theon thettTs


4

Ruby , 173 170 bayt

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}

Çevrimiçi deneyin!


4

Haskell , 243 215 bayt

Nimi'den büyük yardımı ile 215 byte'a düşürüldü

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

Çevrimiçi deneyin!

(Eski 243 bayt sürümü burada ).

Oldukça basit bir çözüm.

-- 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
Bazı ipuçları: a) syalnızca bir kez kullanırsınız , böylece satır içi yapabilirsiniz. b) her zaman başa getirebilir ve ekleme şey t, bu yüzden bunu bir (infix) işlevi yapabilir: t#u=t:"here's a "++u. c) büyük listeyi işlevine göre kısa lkurar map(++" on the ")(words"smile flea ...". Ayrıca: o listeye eklenen her şeyi listenin kendisine taşıyın. d) bırakılacak sayıların listesi şimdi 8aşağıdan 0(tek basamaklı sayılar!) aşağıya doğru uzanır e) şimdi ide bazı baytları kaydedin. f) ana fonksiyonunuzu adlandırmanıza gerek yoktur. Metamıza göre, Haskell değerlerinin uygun fonksiyonlar olduğu kabul edilir, bu nedenle bırak v=.
nimi

... Tüm 215 baytta çevrimiçi Deneyin!
nimi

1
Başka 3 byte kaydetmek için: yerine liste anlama kullanabileceğiniz >>=liste monad ve satır içi dan (concatMap) concatişlevinde l. Çevrimiçi deneyin!
nimi


3

Python 3 , 213 206 198 193 bayt

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)

Çevrimiçi deneyin!


@Sara
-5 byte sayesinde -15 bayt @ ASCII-sadece sayesinde

Muhtemelen biraz daha golf oynamak, ama fazla değil.



@SaraJ Teşekkürler. Her o=e=ikisini de yapan ove eaynı nesneyi ifade eden (açıkça yanlış) izlenim altındaydım . Ayrıca ayrılmanın daha uzun olacağını düşündüm.
Artemis Fowl

@ArtemisFowl ove e do gibi şeyler yani dizeleri Python iletmenin sadece ... aynı nesneyi +=yeni bir kopyasını oluşturmak yerine mevcut olanın mutasyona olacak
ASCII sadece


@ ASCII-sadece biliyorum, ama python'un bir şekilde aynı nesneye başvurmaya devam ettiklerinden emin olduklarını düşündüm .
Artemis Fowl

2

Temiz , 267 bayt

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

Çevrimiçi deneyin!


2

cQuents , 238 219 bayt

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

Çevrimiçi deneyin!

Bu meydan okuma nihayet dilimde listeleri ve dizeleri uygulamama neden oldu. Bu dil tamsayı dizileri için inşa edilmiştir, bu yüzden oldukça iyi oldu!

açıklama

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

@ ASCII, yalnızca 6 bayt, yeni satır başları ve \lunuttuğum bir numarayla tıraş oldu

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

Çevrimiçi deneyin!



Evet. İyi iş. Yeni hatları kesin olarak hatırlamalıydım. Daha önce gördüm \l, ama kullanmak için hiçbir neden olmadı, bu yüzden hiç düşünmedim.
Xcali




2

Kömür , 115 106 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: Toplu kodumu, koronun son satırı için kopyalayarak 9 bayt kurtardı. Açıklama:

≔There's a holeθ

There's a holeOlduğu gibi iki kez kullanılan dize , küçük harf üçüncü kez ve aynı zamanda dördüncü kez, ancak yalnızca ilk 10 karakter kaydedin .

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

Dize bölme bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile oüzerinde xs.

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

i+2Dizinin ilk öğelerini alan, tersine çeviren, bir araya getirilen ve sonuca n theönek ekleyen 9 ayette dolaşın There's a.

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

Çizgiyi çoğaltarak ve koroyu oluşturarak her çizgiyi bir ayette genişletin. Ayetin her bir satırı daha sonra her bir satırın üzerine örtülü olarak basılmıştır ve her bir ayet örtük olarak bir boş satır ile ayrılmaktadır.


2

V , 184 170 bayt

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ñ

Çevrimiçi deneyin!

Açıklama:

  • 4iThere's a hole in the bottom of the sea<\n><esc> "Theres 'denizin dibinde bir delik" 4 kez yerleştirin.
  • kk Üçüncü satıra git
  • y5w "Delik var" kopyala
  • 5eá, "Bir delik var" dan sonra virgül ekleyin
  • lp virgülden sonra yapıştır
  • D satırın kalanını sil
  • 5brt ikinci T küçük harf
  • Hj4yy ikinci satırdan 4 satır kopyala
  • Gp İlk satırdan sonra her şeyi yapıştırın
  • 4w8ion the <esc>(ilk ayetin sonunda) ikinci ayette ilk "deliğe" hareket edin ve "8 kez" üzerine yerleştirin
  • 2briilog <esc> geriye doğru son "açık" konumuna getirin, o tuşunu bir i ile değiştirin ve ardından "log" yazın.
  • 3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc> Her bir "açık" arasına uygun kelimeleri ekleyerek, satır boyunca geriye doğru hareket edin
  • 7ñ4yykp4wd3wñ4yykp4wd3w7 kez çalıştır
    • 4yykp bundan önce ayeti çoğaltmak
    • 4wd3w "Bir delik var" dan sonra ilk kelimeye git ve 3 kelimeyi sil
  • 8ñÄ5jñ her ayetin ilk satırını birinciden sonra çoğaltın (bunlardan 8 tanesi var)

2

/// , 216 bayt

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

Çevrimiçi deneyin!

Bu tür görevler /// oldukça iyi olan tek ve tek şeydir. : D Hey, sonuç C, C # veya Java'dan daha kısadır!

Bu programın çıktısı iki sondaki satır kesmesiyle bitiyor ; Umarım bu bir anlaşma kırıcı değildir.

Her neyse, burada gerçek bir akıllılık yok. Basitçe tekrarlanan dizeleri tanımladım ve onlar için bir karakter kısayolları tanımladım ve daha fazla tekrarlanan dizgi görene kadar tekrar ettim. Bunu az çok saf ve açgözlü bir şekilde yaptım. Bununla birlikte, kasten "denizde pire gülümse" için bir kısayol tanımladı, ardından "denizde pire uçtu" ve ardından kısayollar zinciri oluşturmak için bir kısayol tanımladım. . Sonuç, tüm yeni isimler dizisinin kodda açıkça görülmesi ve bunu oldukça hoş buluyorum. :)

V ve U değiştirildikten sonra aşağıdaki daha okunabilir koda sahibiz:

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

paragraf girintileri ve her şey ile güzel bir PDF'ye derlenir.

Ungolfed ve yorumladı:

\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

Çıktının:

görüntü tanımını buraya girin


2

C # (Visual C # Etkileşimli Derleyici) , 220 bayt

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

Çevrimiçi deneyin!

@ASCIIOlyly -5 bayt ve @someone sayesinde -2 bayt!

Küçük bir çocuğum var ve bu şarkının akılda kalıcı ve sinir bozucu parça olduğunu temin ederim.


1
Size var olduğunu hatırlattığım için özür dilerim: o)
Sok

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


ve sonra boşluk gerekmez iniçinde foreach_>>
ASCII sadece

@ASCIIOnly - Tavsiyeler için teşekkürler :)
dana
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.