Ada seorang wanita tua

23

Tujuan Anda adalah menulis program yang mencetak puisi berikut persis seperti yang ditampilkan di sini:

There was an old lady who swallowed a fly.
I don't know why she swallowed that fly,
Perhaps she'll die.

There was an old lady who swallowed a spider,
That wriggled and iggled and jiggled inside her.
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.

There was an old lady who swallowed a bird,
How absurd to swallow a bird.
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.

There was an old lady who swallowed a cat,
Imagine that to swallow a cat.
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.

There was an old lady who swallowed a dog,
What a hog to swallow a dog.
She swallowed the dog to catch the cat,
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.

There was an old lady who swallowed a horse,
She died of course.

Teks harus muncul persis seperti di sini, dan karakter paling sedikit menang.

Sunting: Program Anda mungkin tidak mengakses internet.

Ethan Roseman
sumber
2
Dihitung dalam byte disandikan UTF-8?
JB
Golf jelas mengatakan "karakter paling sedikit", bukan byte. Encode sesuai keinginan Anda selama masih merupakan program yang valid.
Thomas Eding
1
Sebagai referensi, panjang puisinya adalah 1208 karakter.
JB

Jawaban:

16

Perl 5.10, 392 384 372 235 369 (ASCII) / 234 (Unicode)

Versi ASCII terpendek dari ini adalah 369 karakter:

@_=(fly,spider,bird,cat,dog);$_="There was an old lady who!ed a";for$P("",",
That wrJand Jand jJinside her",",
How absurd&",",
Imagine that&",",
What a hog&"){$p=$c;$c=$".shift@_;$t=$p?"She!ed the$c to catch the$p,
$t":"I don't know why she!ed that$c,
Perhaps she'll die.

$_";$_.="$c$P.
$t";s/&/ to! a$c/}s/!/ swallow/g;s/J/iggled /g;say"$_ horse,
She died of course."

Dimulai dari program dasar ini:

my @animals = qw(fly spider bird cat dog);
my $buf = "There was an old lady who swallowed a ";
for my $phrase ( "",
                 ",\nThat wriggled and iggled and jiggled inside her",
                 ",\nHow absurd&",
                 ",\nImagine that&",
                 ",\nWhat a hog&" ) { 
  $previous = $current;
  $current = shift @animals;
  $trail = $previous ? "She swallowed the $current to catch the $previous,\n$trail"
                     : "I don't know why she swallowed that $current,\n"
                       . "Perhaps she'll die.\n\n$buf";
  $buf .= "$current$phrase.\n$trail";
  $buf =~ s/&/ to swallow a $current/;
}
say "$buf horse,\nShe died of course.";

Gagasan intinya adalah mempertahankan akhir sajak dan awal sajak berikutnya $trail, menambahnya seiring berjalannya waktu. Itu dibuat non-sepele oleh kebutuhan kasus khusus untuk penggunaan pertama, dan upaya untuk menggunakan kembali variabel nama hewan bahkan dalam frasa khusus hewan. Optimalisasi lebih lanjut meliputi:

  • pengidentifikasi satu karakter untuk semuanya
  • menggunakan barewords alih-alih string yang dikutip untuk daftar hewan
  • penggunaan akumulator $_untuk $bufmempersingkat sebagian besar operasi substitusi bahkan lebih (penggunaan @_dengan kebiasaan dan tidak memenangkan apa pun lebih dari karakter lain)
  • termasuk ruang sebelumnya langsung di dalam variabel nama hewan (karakter spasi diambil dari $"variabel)
  • subtitusi regexp untuk mempersingkat frasa yang paling umum: ' swallow'dan'iggled '
  • tidak ada kode spasi apa pun dan semua \ndalam string literal diganti dengan baris baru yang sebenarnya

Semua kecuali optimasi terakhir menghasilkan ini:

@_ = (fly, spider, bird, cat, dog);
$_ = "There was an old lady who!ed a";
for $P ( "",
         ",\nThat wrJand Jand jJinside her",
         ",\nHow absurd&",
         ",\nImagine that&",
         ",\nWhat a hog&" ) { 
  $p = $c;
  $c = $" . shift @_;
  $t = $p ? "She!ed the$c to catch the$p,\n$t"
          : "I don't know why she!ed that$c,\nPerhaps she'll die.\n\n$_";
  $_ .= "$c$P.\n$t";
  s/&/ to! a$c/;
}
s/!/ swallow/g;
s/J/iggled /g;
say "$_ horse,\nShe died of course.";

Selain itu, golf ini adalah korban dari masalah pengkodean yang tidak ditentukan. Seperti itu - seperti yang sekarang - menghitung karakter individu dan bukan byte dalam pengkodean yang ditentukan, ada keuntungan besar yang bisa dicapai dengan mendekode sumber program dari UCS2 sebelum memulai. Hasil akhirnya tidak lagi mudah dibaca, tetapi singkat. (234 karakter, dihitung sebagai perbedaan dari perl -E''seperti biasanya) (Saya harus menyertakan baris belakang baru untuk membuatnya UCS2 valid)

$ perl -MEncode=from_to -e'$_="䁟㴨晬礬獰楤敲Ɫ楲搬捡琬摯朩㬤弽≔桥牥⁷慳⁡渠潬搠污摹⁷桯Ⅵ搠愢㭦潲⑐⠢∬∬੔桡琠睲䩡湤⁊慮搠橊楮獩摥⁨敲∬∬ੈ潷⁡扳畲搦∬∬੉浡杩湥⁴桡琦∬∬੗桡琠愠桯朦∩笤瀽④㬤挽␢⹳桩晴䁟㬤琽⑰㼢卨攡敤⁴桥④⁴漠捡瑣栠瑨攤瀬ਤ琢㨢䤠摯渧琠歮潷⁷桹⁳桥Ⅵ搠瑨慴④Ⰺ健牨慰猠獨攧汬⁤楥⸊ਤ弢㬤弮㴢④⑐⸊⑴∻猯☯⁴漡⁡④⽽猯ℯ⁳睡汬潷⽧㭳⽊⽩杧汥搠⽧㭳慹∤张桯牳攬੓桥⁤楥搠潦⁣潵牳攮∊";from_to($_,utf8,ucs2);eval'

Untung ada banyak golf dari sebelum beralih ke Unicode, atau itu tidak akan menyenangkan.

Sunting: tidak dapat menemukan cara untuk menyalin / menempel versi 234 karakter ke browser ini, jadi saya meninggalkan versi 235 karakter. Akan memperbaiki malam ini, ketika saya mendapatkan clipboard sadar UTF8 nyata. menemukan jalan. Bukti semu pada ideone.

JB
sumber
2
Saya mencabut upvote saya. Trik pengemasan unicode semakin tua.
Joey Adams
2
Versi tidak dikemas masih dalam, Anda tahu; p
JB
5
@ JoeyAdams benar-benar? Saya bahkan tidak melihat versi yang dikemas sampai saya membaca komentar Anda
Cyoce
8

Perl, 120 94 karakter

Hitungan termasuk panggilan ke juru bahasa.

Anda memang mengatakan untuk mereproduksi persis seperti di sini;)

perl -MLWP::Simple -E'($p=get("http://goo.gl/kg17j"))=~s#^.+?pr.*?de>|</co.*?re>.+$##sg;say$p'

NB

Solusi ini yang mendorong pembatasan 'tidak ada internet'. Biarkan itu menjadi pelajaran untuk spesifikasi pertanyaan kode-golf di masa depan :)

Zaid
sumber
3
Entri ini berubah menjadi quine saat saya mempostingnya! Manipulasi regex kecil memulihkan layanan kembali normal ...
Zaid
2
Cara busuk untuk menyelesaikannya, karena bergantung pada keberadaan sumber daya luar. Saya akan menghitung panjang pertanyaan terhadapnya sama seperti saya akan program yang membaca puisi dari file.
dmckee
2
Sumber daya luar bukan masalah, karena cukup dipertanyakan sumber daya apa dan apa lingkungan itu sama sekali. Saya suka mengeksploitasi kesenjangan dalam pertanyaan awal yang tidak didefinisikan secara ketat. Ini bukan solusi, tetapi contoh yang baik untuk berhati-hati mengajukan pertanyaan :-)
Ante
3
Ini mungkin cara yang busuk untuk menyelesaikannya, tetapi itu bergantung pada sumber daya luar yang persis sama mungkin ada seperti pertanyaan yang dijawabnya. Yang membuatnya dapat diterima sebagai jawaban untuk pertanyaan tersebut, IMO.
JB
2
@trinithis: Pembatasan 'no-Internet' diberlakukan setelah posting saya. Memang, ini bukan upaya serius dalam mengkode solusi, tetapi memenuhi spesifikasi pada saat mempostingnya. Oh, dan LWP::Simple merupakan bagian dari inti Perl, setidaknya di v5.12.3.
Zaid
3

Python 3.x: 407 karakter

import base64,zlib;print(zlib.decompress(base64.b64decode(b'eNrlkLFOxDAQRPt8xXTXoHwHdEhEot7L+myD8Z7snKz8Pd6LT7mgFFQIRGftPs/OzOBMMiiUQRESGIF4RnGCXCgEKYZBOIW5B7onsMTDhPcopTIzsjN33ORoUvShos8mOTpnJQ4hgL3pu2741rF89mySigwqWJK3NugmMu6eb+3tY648qrRafPniyDQ5TIKRptFdZ83kz+Q5+sQq8ViP0DFfEquZRrT9vnXdbI2v3fzCoPXs9dgHWR/NorpJWoH9oONCrr5vnf35TlisKryqGsGJ3TZS1/uN8EKurlu5/6k7Jymbm7f6kSEnjHKp0/4TSSOZgA==')).decode('utf8'))
dan04
sumber
3
Anda bisa mendapatkannya turun ke 391 karakter dengan melakukan sesuatu seperti: zlib impor; zlib.decompress cetak ( "" "eJzlkLFOxDAQRPt8xXTXoHwHdEhEot7L + myD8Z7snKz8Pd6LT7mgFFQIRGftPs / OzOBMMiiUQRES GIF4RnGCXCgEKYZBOIW5B7onsMTDhPcopTIzsjN33ORoUvShos8mOTpnJQ4hgL3pu2741rF89myS igwqWJK3NugmMu6eb + 3tY648qrRafPniyDQ5TIKRptFdZ83kz + Q5 + sQq8ViP0DFfEquZRrT9vnXd bI2v3fzCoPXs9dgHWR / NorpJWoH9oONCrr5vnf35TlisKryqGsGJ3TZS1 / uN8EKurlu5 / 6k7Jymb m7f6kSEnjHKp0 / 4TSSOZgA ==" "" .decode ('base64'))
ESultanik
Cara kreatif untuk mengompres ini.
juniorRubyist
3

JavaScript (422)

Bekerja dalam versi interpreter SpiderMonkey yang digunakan oleh golf anarki dan ideone .

for(a="fly0spider0bird0cat0dog0horse0How absurd0Imagine that0What a hog".split(i=0);p=print;p("I don't know why she swallowed that fly,\nPerhaps she'll die.\n")){p("There was an old lady who swallowed a",a[i]+(i?",":"."));i>4&&quit(p("She died of course."));i&&p(i>1?a[4+i]+" to swallow a "+a[i]+".":"That wriggled and iggled and jiggled inside her.");for(j=i++;j;)p("She swallowed the "+a[j]+" to catch the "+a[--j]+",")}

Sedikit lebih baik diformat:

for (a = "fly0spider0bird0cat0dog0horse0How absurd0Imagine that0What a hog".split(i = 0);
p = print; p("I don't know why she swallowed that fly,\nPerhaps she'll die.\n")) {
    p("There was an old lady who swallowed a", a[i] + (i ? "," : "."));
    i > 4 && quit(p("She died of course."));
    i && p(i > 1
        ? a[4 + i] + " to swallow a " + a[i] + "."
        : "That wriggled and iggled and jiggled inside her."
    );
    for (j = i++; j;) p("She swallowed the " + a[j] + " to catch the " + a[--j] + ",");
}
Mohon berdiri
sumber
Pintar penggunaan membelah dengan 0trik untuk menginisialisasi iuntuk 0hanya 2 byte. Punya +1
Cyoce
3

Vim, 373 penekanan tombol

iThere was an old lady who swallowed a fly.
I don't know why she s<C-n> that f<C-n>,
Perhaps she'll die.

T<C-x><C-l><Left><C-w>spider<Esc>oThat wriggled <Esc>6hiand <Esc>3hy$u$ppbij<End>inside her.
She s<C-n> the sp<C-n> to catch the f<C-n>,
I<C-x><C-l><C-x><C-l><Esc>qqyapGp3jYPkk$Bqcwbird<Esc>+CHow absurd to sw<C-n><Backspace><Backspace> a b<C-n>.<Esc>qwyb5wvep$Bvepq@qcwcat<Esc>+CImagine that to sw<C-p> a cat.<Esc>@w@qcwdog<Esc>+CWhat a hog to sw<C-p> a dog.<Esc>@w@qcwhorse<Esc>+cGShe d<C-p>d of course.

Lucu bagaimana eksponensial yang berebut.

BlackCap
sumber
3

C (gcc) , 429 424 byte

-5 bytes berkat ceilingcat

*w[]={"384fly<1","I don't know why she5ed that fly<Perhaps she'll die.772","There was an old lady who5ed a ","She5ed the "," to catch the "," swallow"," to5 a ","\n","spider","bird","cat","iggled ",",7","3948<0"};U(char*s){for(;*s;s++)*s>47&*s<65?U(w[*s-48]):putchar(*s);}f(){U("2fly.718<That wr;and ;and j;inside her.709<How absurd69.7=:<Imagine that6:.73:49<=dog<What a hog6dog.73dog4:<3:49<=horse<She died of course.7");}

Cobalah online!

gastropner
sumber
2

Ruby, 436 karakter

w=" swallowed "
f="There was an old lady who#{w}a "
c=" to swallow a %s"
b="dog","cat","bird","spider","fly"
s=nil,"That wriggled and iggled and jiggled inside her","How absurd"+c,"Imagine that"+c,"What a hog"+c
a=[]
5.times{k=g=b.pop;t,*s=s
puts f+k+(t ??,:?.),t&&[t%k+?.,a.map{|x|y,k=k,x;"She#{w}the #{y} to catch the #{k},"}],"I don't know why she#{w}that fly,","Perhaps she'll die.",""
a=[g]+a}
puts f+"horse,","She died of course."
Howard
sumber
2

Scala ( 706 619 599 550 karakter)

val L=Seq("fly","spider","bird","cat","dog")
val M="\nThere was an old lady who %sed a %s,"
type S=String
def s(l:S,a:S="",b:S="")=l.format("swallow",a,b)
def p(l:S,a:S=""){println(s(l,a))}
var i=0
var r=List[S]()
L.map{a=>{p(M,a)
if(i>0){p(Seq("","That wriggled and iggled and jiggled inside her.","How absurd","Imagine that","What a hog")(i)+(if(i>1)" to %s a %s."else""),a)
r::=s("She %sed the %s to catch the %s,",L(i),L(i-1))
r.map(p(_))}
p("I don't know why she %sed that fly,\nPerhaps she'll die.")
i+=1}}
p(M,"horse")
p("She died of course.")

Menggunakan peta alih-alih foreach memungkinkan untuk menekan lebih banyak karakter ... Dalam codegolf, kami tidak peduli dengan kinerja, keanggunan (non-mutability) atau logika ...

PhiLho
sumber
2

tinta , 370 369 354 byte

LIST B=fly,spider,bird,cat,dog,horse
VAR s=" swallow"
-(i)~B=B(i)
There was an old lady who{s}ed a {B}{.|,}
{|That wriggled and iggled and jiggled inside her|How absurd|Imagine that|What a hog|She died of course.->END}{|.| to{s} a {B}.}
-(k)~B--
{B:
She{s}ed the {B+1} to catch the {B},
->k
}I don't know why she{s}ed that fly,
Perhaps she'll die.
\ 
->i

Cobalah online!

Penjelasan

LIST B=fly,spider,bird,cat,dog,horse           // Ink's "LIST"s aren't much like lists - they're more like enums. Here we create a list type stating what animals exist, and make a set containing none of them.
VAR s=" swallow "                              // Pretty self-explanatory
-(i)~B=B(i)                                    // The i label keeps track of how many times we've visited it. We set B (the set) to be equal to the i-th item in B (the list type).
There was an old lady who{s}ed a {B}{.|,}      // Print the first line. {.|,} is a sequence - it's a period the first time it's encountered, and a comma every subsequent time.
                                               // Sequences can have more than one item in them, which is how we print the second line. When we get to the horse one, we terminate the program right away.
{|That wriggled and iggled and jiggled inside her|How absurd|Imagine that|What a hog|She died of course.->END}{|.|to{s} a {B}}.}
-(k)~B--                                       // Step back through the list type.
{B:                                            // A conditional - we execure the next two lines if B is non-empty.
She{s}ed the {B+1} to catch the {B},           // Print the "she swallowed the..." line
->k                                            // And repeat
}I don't know why she{s}ed that fly,           // Only reached when the conditional fails.
Perhaps she'll die.
\                                              // A backslash and a space to force an empty line.
->i                                            // Back to the top
Sara J
sumber
1

Haskell, 515 498

Skor tidak menghitung baris baru dan ruang yang ditambahkan untuk presentasi.

b c a="There was an old lady who swallowed a "++a++c++".\n"
t r a=b(",\n"++r++" to swallow a "++a)a
s(a,b)="She swallowed the "++a++" to catch the "++b++",\n"
z=["fly","spider","bird","cat","dog"]
h=[b"",b",\nThat wriggled and iggled and jiggled inside her",t"How absurd",
 t"Imagine that",t"What a hog"]
v(g,p)=g++(=<<)s(zip p$tail p)++
 "I don't know why she swallowed that fly,\nPerhaps she'll die.\n\n"
main=putStr$(=<<)v(zip(zipWith($)h z)(tail$scanl(flip(:))[]z))++b
 ",\nShe died of course""horse"

Tidak Disatukan:

type Animal = String
type Comment = String

beginning :: Animal -> Comment -> String
beginning animal comment = "There was an old lady who swallowed a " ++ animal ++ comment ++ ".\n"

ending :: String
ending = "I don't know why she swallowed that fly,\nPerhaps she'll die.\n\n"

to_swallow :: String -> Animal -> Comment
to_swallow start animal = ",\n" ++ start ++ " to swallow a " ++ animal

swallowed_to_catch :: (Animal, Animal) -> String
swallowed_to_catch (a, b) = "She swallowed the " ++ a ++ " to catch the " ++ b ++ ",\n"

animals :: [(Animal, Animal -> Comment)]
animals = [("fly",    const "")
          ,("spider", const ",\nThat wriggled and iggled and jiggled inside her")
          ,("bird",   to_swallow "How absurd")
          ,("cat",    to_swallow "Imagine that")
          ,("dog",    to_swallow "What a hog")
          ]

-- Turn [1,2,3,4,5] into [[1], [2,1], [3,2,1], [4,3,2,1], [5,4,3,2,1]]
trail :: [a] -> [[a]]
trail = tail . scanl (flip (:)) []

verses :: [String]
verses = zipWith verse animals (trail $ map fst animals)

verse :: (Animal, Animal -> Comment) -> [Animal] -> String
verse (animal, comment) swallow_chain =
    beginning animal (comment animal) ++
    concatMap swallowed_to_catch (zip swallow_chain (tail swallow_chain)) ++
    ending

poem :: String
poem = concat verses ++ beginning "horse" ",\nShe died of course"

main :: IO ()
main = putStr poem
Joey Adams
sumber
Mengasingkan (++)dengan pengidentifikasi yang lebih pendek mungkin merupakan ide yang bagus.
Thomas Eding
@ThomasEding atau aliasing ke #operator atau yang serupa
Cyoce
1

Python, 484

Ok, saya melakukannya tetapi cukup membosankan ...

Kalimat terakhir selalu dengan "terbang" sehingga beberapa karakter dihapus ...

f,s,b,c,d=o='fly spider bird cat dog'.split()
x='There was an old lady who swallowed a %s.\n'
t=' to swallow a %s.\n'
r=['That wriggled and iggled and jiggled inside her.\n','How absurd'+t%b,'Imagine that'+t%c,'What a hog'+t%d]
t=("She swallowed the %s to catch the %s,\n"*4%(d,c,c,b,b,s,s,f)).split('\n')
print("I don't know why she swallowed that fly,\nPerhaps she'll die.\n\n".join([x%f]+[x%o[i]+r[i-1]+'\n'.join(t[-i-1:])for i in range(1,5)]+[''])+x%'horse'+'She died of course.')

Versi yang kurang golf:

f,s,b,c,d = all = 'fly spider bird cat dog'.split()

what = 'There was an old lady who swallowed a %s.\n'

t = ' to swallow a %s.\n'
comments = ['That wriggled and iggled and jiggled inside her.\n',
            'How absurd' + t%b,
            'Imagine that' + t%c,
            'What a hog' + t%d]

swallowed = "She swallowed the %s to catch the %s,\n"
lines = (swallowed*4%(d,c,c,b,b,s,s,f)).split('\n')

end = '''I don't know why she swallowed that fly,
Perhaps she'll die.\n\n'''

def who_catch_who(i):
    return '\n'.join(lines[-i-1:])

p = end.join([what % f] + 
             [what % all[i] +
              comments[i-1] +
              who_catch_who(i) for i in range(1,5)] +
             [''])

print(p + what % 'horse' + 'She died of course.')
JBernardo
sumber
1

C, untuk bersenang-senang (561 karakter)


Skor tidak menghitung baris baru dan ruang yang ditambahkan untuk presentasi.

Terima kasih kepada JB untuk perbaikannya!

#include <stdio.h>

void main() {
    char *e = "\nShe swallowed the cat to catch the bird,\nShe swallowed the bird to catch the spider,\nShe swallowed the spider to catch the fly,\nI don't know why she swallowed that fly,\nPerhaps she'll die.\n\nThere was an old lady who swallowed a ";
    printf("%sfly.%sspider,\nThat wriggled and iggled and jiggled inside her.%sbird,\nHow absurd to swallow a bird.%scat,\nImagine that to swallow a cat.%sdog,\nWhat a hog to swallow a dog.\nShe swallowed the dog to catch the cat,%shorse,\nShe died of course.", e+191, e+128, e+85, e+41, e, e);
}
Matius Baca
sumber
Apakah Anda yakin Anda membutuhkan semua itu &dan []?
JB
1
@JB benar, Anda dapat mengganti [] dengan * a dan hanya menghapus &. Anda harus mendapatkan 25 karakter.
PhiLho
Mungkin ada sesuatu yang keren untuk dilakukan dalam C, dengan pointer ke tengah string bersama yang umum.
JB
@ Philho Terima kasih, kemarin otak saya agak digoreng dan saya lupa menghapus &s ketika menggunakan pointer dan tidak berhasil: P. JB, saya tidak tahu metode yang tidak memerlukan pengindeksan (dan menggunakan lebih banyak karakter).
Matius Baca
1
Sesuatu seperti ini. Versi Anda, yang disusun ulang, 627 karakter pastebin.com/MQ4LJue7 ; versi saya, 561 karakter pastebin.com/7eMAWmAi
JB
1

C #, 556 karakter

class P{static void Main(){string a="There was an old lady who swallowed a ",b="I don't know why she swallowed that ",c="She swallowed the ",d=" to catch the ",e="Perhaps she'll die.\n\n",f="fly",g="spider",h="bird",i="cat",j="dog",k=",\n",l=".\n",m="to swallow a ",n=c+g+d+f+k,o=c+h+d+g+k,p=b+f+k,q=c+i+d+h+k,r=n+p,s=o+r,t=q+s,u=e+a;System.Console.Write(a+f+l+p+u+g+k+"That wriggled and iggled and jiggled inside her"+l+r+u+h+k+"How absurd "+m+h+l+s+u+i+k+"Imagine that "+m+i+l+t+u+j+k+"What a hog "+m+j+l+c+j+d+i+k+t+u+"horse"+k+"She died of course.");}}
Penguji101
sumber
1

Perl, 489 karakter

sub Y{$t=pop;my$s;while($b=pop){$s.="She ${W}ed the $t to catch the $b,\n";$t=$b;}$s.=$l{fly}.$/;}$W='swallow';$w='iggled';$q=" to $W a";$o="There was an old lady who ${W}ed a";$h='hat';@f=qw/fly spider bird cat dog/;@l{@f}=("I don't know why she ${W}ed t$h fly,
Perhaps she'll die.$/","T$h wr$w and $w and j$w inside her.","How absurd$q bird.","Imagine t$h$q cat.","W$h a hog$q dog.");map{$m=$f[$_];print"$o $m,
$l{$m}
",$_?Y@f[0..$_]:'';}0..$#f;print"$o horse,
She died of course.$/"
Zaid
sumber
1

PHP , 344 byte

<?=gzinflate(base64_decode("5VAxTsQwEOz9iu2uifIO6JA4iXovu2cbjPdk+2Tl96zjoLugFFQIRGfNjGdn5ug4MVTMgBEkEASkGaoTyBVDkMoECOcwj+YRSOKhwFuUqooZsuM7VXFYmnAwT5wcXnLjDyEAeR6NOX7rUL544jSoWs1q8taGhkeCu+fr+vYxqxrUeDTPX7LwagVFYMIyuQVb4v1Ej5NPNJgHPYCnfE3UYqz8yu5Fbvg28Ocev6yentRD72h95O646af0Xr2p6255+0p/eAcSO5iX5oTgxG5XUHJvBeq6W9plzP+wlpOUuafSbwRyhkmuio0f"));

Cobalah online!

PHP , 405 byte

<?=strtr("0fly.
106That wr8and 8and j8inside her.
23107,
How absurd57.
274623109,
Imagine that59.
2947,
27462310dog,
What a hog5dog.
2dog49,
2947,
27462310horse,
She died of course.",["There was an old lady who swallowed a ","I don't know why she swallowed that fly,
Perhaps she'll die.

","She swallowed the ","spider to catch the fly,
"," to catch the "," to swallow a ","spider,
",bird,"iggled ",cat]);

Cobalah online!

Jörg Hülsermann
sumber
1

Bubblegum, 255 byte

0000000: e0 04 85 00   f7 5d 00 2a   1a 08 a7 55   8e 22 31 d2 │ à...÷].*..§U."1Ò
0000010: cb f7 30 fa   52 4d 88 81   61 e4 be 9d   c2 f0 0e f8 │ Ë÷0úRM..aä¾.Âð.ø
0000020: dc c9 de 24   63 c9 1f c7   f7 71 e4 ed   40 68 0e d2 │ ÜÉÞ$cÉ.Ç÷qäí@h.Ò
0000030: cd 76 d8 d9   0d 61 78 f7   40 cf 23 95   48 e9 be 27 │ ÍvØÙ.ax÷@Ï#.Hé¾'
0000040: aa 75 57 ff   51 9e 1f 1f   25 d8 93 4d   18 69 c9 01 │ ªuWÿQ...%Ø.M.iÉ.
0000050: 12 16 ec c1   ff e0 01 7e   fa ea 1e cc   84 d7 58 b8 │ ..ìÁÿà.~úê.Ì.×X¸
0000060: 47 d4 40 b4   ff c7 64 a9   2f 07 bf 7b   f4 25 74 94 │ GÔ@´ÿÇd©/.¿{ô%t.
0000070: af da 8a fc   0c 18 81 58   b8 3c 2e 97   c0 9d e8 27 │ ¯Ú.ü...X¸<..À.è'
0000080: 3e 02 8a d2   1b 7c 94 cc   cb f4 05 7c   c7 77 f3 75 │ >..Ò.|.ÌËô.|Çwóu
0000090: ea 7e 02 d6   3a 84 5c 4e   1f 88 e7 03   9a 1d 3f 13 │ ê~.Ö:.\N..ç...?.
00000a0: a6 9f 2e cf   be 77 16 be   f1 5f 01 52   cf 13 89 b3 │ ¦..Ͼw.¾ñ_.RÏ..³
00000b0: f3 8a f7 90   18 08 50 99   27 f7 83 d2   a4 32 08 76 │ ó.÷...P.'÷.Ò¤2.v
00000c0: ef b4 99 6c   80 dd 1a 47   04 26 fe b1   02 b3 d4 e7 │ ï´.l.Ý.G.&þ±.³Ôç
00000d0: 3d 44 3a 64   64 46 39 77   35 61 6b 6c   7b 68 34 db │ =D:ddF9w5akl{h4Û
00000e0: 51 75 39 2e   bc 46 8e 96   d1 8a 4c 79   f4 7a 7b e0 │ Qu9.¼F..Ñ.Lyôz{à
00000f0: f5 44 85 eb   ef 68 d5 22   26 4a 2a ef   fc 60 00    │ õD.ëïhÕ"&J*ïü`.
Uriel
sumber
1

Python 2 , 453 442 427 387 byte

  • @nore menyelamatkan 11 byte: Terima kasih banyak !!: menunjuk £digunakan sebelumnya adalah char byte ganda !!
  • disimpan 15 byte: swallowsingkatan
  • @ lebih menghemat 40 byte !!!!! TERIMA KASIH BANYAK!!!
  • @ Zakary T menyimpan 1 byte: spasi di antara indan "..."dihapus
  • Terima kasih untuk notepad ++ menemukan dan mengganti alat. ;)
r="%2(:0)That wr66j5 inside her(_1)How absurd+1({3)Imagine that+3(}4)What a hog+4(~4*3)}horse)She died of course."
for i in"}~3*1){!{~1*0)_!_~0*2):!:^2)$%!~She7ed the !%There was an old lady who7ed a !$Perhaps she'll die(\n!* to 3ch the !^I don't know why she7ed that !+ to7 a !(.\n!),\n!0spider!1bird!2fly!3cat!4dog!65 and !5iggled!7 swallow".split("!"):r=r.replace(i[0],i[1:])
print r

Cobalah online!

officialaimm
sumber
1
Anda dapat menyimpan banyak byte dengan menggunakan ~alih-alih £(yang panjangnya dua byte bukan ASCII).
Nore
Woah, terima kasih bung! Tidak pernah tahu itu adalah karakter yang diperluas !!
officialaimm
1
Ini masih bisa sangat golf (beberapa karakter dengan simbol di awal, 1 dengan menggunakan Python2, dan penggantian lebih mengoptimalkan)
nore
1
Anda tidak perlu spasi antara indan string literal.
Zacharý
1

Groovy, 475 byte

b="swallowed"
a="There was an old lady who $b a"
c="I don't know why she $b that fly,\nperhaps she'll die."
d="She $b the"
e=" to catch the"
f=" to swallow a"
g="iggled"
h=" spider"
i=" fly"
j=" dog"
k=" cat"
l=" bird"
m="$d$h$e$i,"
n="$d$l$e$h,"
o="$d$k$e$l,"
print"""
$a$i.
$c

$a$h,
That wr$g and $g and j$g inside her.
$m
$c

$a$l,
How absurd$f$l.
$n
$m
$c

$a$k,
Imagine that$f$k.
$o
$n
$m
$c

$a$j,
What a hog$f$j
$d$j$e$k,
$o
$n
$m
$c

$a horse,
She died of course."""

Tidak ada yang terlalu menarik, hanya banyak interpolasi string. Kiat-kiat golf yang satu ini dipersilakan!

metode statis
sumber
Apakah Anda bermaksud menulis ditelan, tidak dangkal?
Destructible Lemon
@Destructible Lemon sudah diperbaiki sekarang: P
staticmethod
1

tcl, 451 byte

lassign {\ swallowed fly, spider " to catch the " bird cat iggled " to swallow a"} W f s c b a i w
puts "[set t "There was an old lady who$W a "]fly.
[set I "I don't know why she$W that $f
Perhaps she'll die.

"]$t$s,
That wr$i and $i and j$i inside her.
[set S "She$W the "]$s$c$f
$I$t$b,
How absurd$w $b.[set v \n$S$b$c$s,\n$S$s$c$f\n$I]$t$a,
Imagine that$w $a.
[set X $S$a$c$b,$v$t]dog,
What a hog$w dog.
${S}dog$c$a,
$X\horse,
She died of course."

Tersedia untuk dijalankan di: http://rextester.com/live/GXF89639 (upaya ke-10)

sergiol
sumber
1

Bahasa Wolfram (Mathematica) , 295 byte

BinaryDeserialize@ByteArray@ToCharacterCode@"8C:xœåPANÃ0<ãWì­—(ï€R‘8o³[ÛÅx+;••ðnÖqª6(NÄÍšÏÎÌþãáÅqb(˜#H H'† …	Žaê͐ÄÝoQŠ*&ÈŽïT£Ã±
;óÌÉá9W~çÞ˜ïÊgOœ:U«YIÞÚPñHp÷<-o³ªA{³ÿ’…+7cs¼Ÿèqð‰:ó¨ð/‰jŒ…_Ø­È_¾îñËêéI=ôŽÖGnŽ«~JoÕšî–·­ô‡w ±y­NNìz%·V ¦»¥Çük9I™[*ýF Gä¢Xÿ	Tÿ”\""

Cobalah online!

Solusi ini adalah dekompresor 46-byte yang BinaryDeserialize@ByteArray@ToCharacterCode@"..."bekerja pada array 248-byte yang menyamar sebagai string ASCII. Mentransfer string ini di antara berbagai program agak rumit. TIO, misalnya, menghancurkan solusi ini menjadi 416 byte menggunakan pengkodean UTF-8 alih-alih menjaga string ASCII. Untuk mendapatkan solusi minimal 295-byte, simpan teks dalam variabel textdan jalankan

BinaryWrite["ThereWasAnOldLady.wl", Join[
  ToCharacterCode["BinaryDeserialize@ByteArray@ToCharacterCode@\""],
  Normal[BinarySerialize[text, PerformanceGoal -> "Size"]] /. {34 -> Sequence[92, 34]},
  ToCharacterCode["\""]]]

kemudian jalankan file yang dihasilkan pada command-line dengan

wolframscript -print -f ThereWasAnOldLady.wl 
Roma
sumber
0

Java 758 karakter

Ini adalah upaya Java saya (758 karakter)

public class Poem{public static void main(String[] args){String s1="swallowed",st="There was an old lady who "+s1+" a |.",d1="Perhaps she'll die.",d2="She died ofcourse.",e="I don't know why she " + s1 + " that fly,\n";String[] a={ "fly","spider","bird","cat","dog","horse"};String[] q={ "","That wriggled and iggled and jiggled inside her.","How absurd |","Imagine that |","What a hog |",null};for(int i=0;i < a.length;i++){print(st.replace("|",a[i]));if(q[i]==null){print(d2);break;}if(!q[i].isEmpty()){               print((q[i].replace("|","to swallow a " + a[i])).trim());for(int j=i;j > 0;j--){print("She swallowed the " + a[j] + " to catch the " + a[j - 1] + ",");}}print(e + d1 + "\n");}}
static void print(String value){System.out.println(value);}}
pengguna667914
sumber
2
Anda dapat memperoleh beberapa karakter ... Puisi => P, args => x, cetak => p, nilai => v, dua huruf vars => satu huruf vars, menghilangkan lebih banyak spasi.
PhiLho
0

Java, 655 byte

public class M{public static void main(String[]P){String S="swallowed",T="There was an old lady who "+S+" a |.",e="I don't know why she "+S+" that fly,\n";String[]a={"fly","spider","bird","cat","dog","horse"};String[]q={"","That wriggled and iggled and jiggled inside her.","How absurd |","Imagine that |","What a hog |",null};for(int i=0;i<a.length;i++){p(T.replace("|",a[i]));if(q[i]==null){p("She died of course.");break;}if(!q[i].isEmpty()){p((q[i].replace("|","to swallow a "+a[i])).trim());for(int j=i;j>0;j--){p("She swallowed the "+a[j]+" to catch the "+a[j-1]+",");}}p(e+"Perhaps she'll die.\n");}}static void p(String v){System.out.println(v);}}

Ini adalah versi golf dari jawaban ini . Ada lebih dari 100 byte yang disimpan pada hal-hal kecil.

Zacharý
sumber
Beberapa hal lagi untuk golf: public dapat dihapus; class M{public static void mainbisa interface M{static void main; String S=...,T=...,e=...;String[]a=...;String[]q=...;bisa String S=...,T=...,e=...,a[]=...,q[]=...;; for(int i=0;...)...for(int j=ibisa for(int i=0,j;...)...for(j=i; for(j=i;j>0;j--)...a[j]...a[j-1]bisa for(j=i;j>0;)...a[j]...[a--j]; static void p(String v){...}bisa static<T>void p(T v){...}( 623 bytes ) Cobalah secara online.
Kevin Cruijssen
0

Arang , 369 366 byte

A”↓0*)B⎚D³9;7Q7∨-f¶_²χ⁶;↧l⁺I´”¦αA“V×q▶²▷O≕⦃0j↖▷(τ⎇⦄4ω\`j0T⁹ψI2b1züρÀ↑‹⁻ê£AZ‹?DOR§1φ”¦βA⟦spider¦bird¦cat¦dog⟧¦λA,¶¦νA⟦”↶7⎇IPVpθθ⪪➙S²p⸿H⁸✂ν‖2↖²φ↘nτME⦄B↓ξlF⁵y”¦”↶7Nl@;⪫λ38N∕´≕⁺)³ nÀ‴⦃”¦”↶7←´<7YKBYχnZ-↖U⎇ι\HUθ%;⟧”¦”↶7∧§‴⟧O×φ¢\`*NQ¶G⁺$π‽ξat”⟧μA”↓/!Zm⪫⟧αÀ⁻Vε>⟲”¦σA”|‽aC-⁴t;Z⌕”¦τA“Y∨↷ur1BO#ÿk»⁻υv‽⌊←zω↘^”¦η⁺αβF⁴«⁺⁺⁺α§λιν§μιF⮌…⁰ι«⁺⁺⁺⁺σ§λ⁺κ¹τ§λκν»⁺⁺⁺σ§λ⁰τβ»⁺αη

Cobalah online!

Tautan ke versi verbose kode.

Charlie
sumber
0

PowerShell , 512 byte

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAOVQQWoDMQy8L+wfdMsl5B3tLdBAz8pKsd26VrAdzP4+cm2SbNlDT6WlN6EZzYzmYDkyFEyAAcQTeKQZihVIBb2XwgQIJz/vxuEZSMImw3uQopQZkuUHWraYK3M7DnuOFs+pEjbeAznW83E4fMssnR1x3Fa6CpbojPEVCAQP41ufXUhKB1VWi5cvgbiLQRaYME/2c9cy/tA3RxdJNZ7UBI/pEqlm6YQOrwavwDL2rZdf+KXaVrMPNC5wU128qfjql1Mj3lP3uv56HyRGJV6rGoIVs2xD0dU2qBHvmVut/6c2KzFxj6aXBHKCSS663F0B')),0,249),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

Cobalah online!

Kredit ke @Chirishman untuk pos mereka .

akar
sumber
0

Stax , 195 byte

ó┤♣≤jß¡εD<Çjò≡²£c¼ìv┴Åô║,·~┼¢╝EΦ5xZ&√σ"ømÿ≡ZπvÅ╦♣1♦>▄\¬◘¡jS¢í╞╟╚);4j↕i¢s♦éÇöy‼ac┴àÇ╩»-ó»ónú¢│g5εÿ╔µ┬bîæ¢k‼f╓fJ○▐═╜<^Γ▀o▀Δnq░╩αÄ&│♣ⁿâmû╣Ç≡*@☺pG_ⁿö┤mσ/V\└?iq┌îB½Ä¿L╙N┐£Ç≥δ2 0δrµLä⌡(⌡▀╬àΦ⌠tƒìg" ⌠ZHó

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

`]q~*}8x9uA3_P0O`jX         push ["fly", "spider", "bird", "cat", "dog"] and store in X register
{                           start iteration over animal list
  `p{+P91{m@Lwe\Jk?!#8`Yp   Store "There was an old lady who swallowed a " in Y register and print it
  .,.i!@+                   Concatenate "." on the first iteration and "," thereafter to the animal
  P                         Print
  i{                        On all iterations after the first, execute this block
    `r4uB2O'O(4XghNqE PhaMg^-riMgR{N>A8LfCNqh@Rn$=aHX|93@_5d?d7qp2-`
                        Push "That wriggled and iggled and jiggled inside her. How absurd, bird. Imagine that, cat. What a hog, dog. She died of course"
    ',`?~nA${F"`R       Replace "," with " to swallow a"
    .. /                Split on string ". "
    iv@                 Get the (i-1)th element where i is the iteration index
    '.+P                Concatenate "." and print
  }M                    End of conditional block
  x2B                   Get adjacent pairs from x (list of animals)
  i(                    Keep first i pairs where i is the iteration index
  r{                    Iterate over reversed list of pairs
    `_,m+"S3&#`p        Print "She swallowed the "
    Ep                  Print the second animal from the pair
    `p<qr?t`p           Print " to catch the "
    ',+P                Concatenate "," to the first animal from the pair and print
  F                     End iterating block
  `;p(9Cv,77BzpP'kB|"`P Print "I don't know why she swallowed that fly,"
  `%?/3.=iHiS6y!`P      Print "Perhaps she'll die."
  zP                    Print a newline
F                       End outer animal iteration.
yp                      Print y register. ("There was an old lady who swallowed a ")
`zvVH`P                 Print "horse,"
                        Print "She died of course." with an unterminated literal
`AJt6Q.3+$!

Jalankan yang ini

rekursif
sumber
-1

PowerShell , 349 byte = Skrip: 9 + Arsip: 340

tar xOf t

Cobalah online!

Skrip Powershell untuk membuat arsip t(lihat TIO):

(
@'
There was an old lady who swallowed a fly.
I don't know why she swallowed that fly,
Perhaps she'll die.
......
There was an old lady who swallowed a horse,
She died of course.
'@
) | Set-Content f -Force
tar zcfo t f
Get-ChildItem f,t # output info about archive size
mazzy
sumber