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.
code-golf
kolmogorov-complexity
Ethan Roseman
sumber
sumber
Jawaban:
Perl 5.10,
392384372235369 (ASCII) / 234 (Unicode)Versi ASCII terpendek dari ini adalah 369 karakter:
Dimulai dari program dasar ini:
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:$_
untuk$buf
mempersingkat sebagian besar operasi substitusi bahkan lebih (penggunaan@_
dengan kebiasaan dan tidak memenangkan apa pun lebih dari karakter lain)$"
variabel)' swallow'
dan'iggled '
\n
dalam string literal diganti dengan baris baru yang sebenarnyaSemua kecuali optimasi terakhir menghasilkan ini:
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)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.sumber
Perl,
12094 karakterHitungan termasuk panggilan ke juru bahasa.
Anda memang mengatakan untuk mereproduksi persis seperti di sini;)
NB
Solusi ini yang mendorong pembatasan 'tidak ada internet'. Biarkan itu menjadi pelajaran untuk spesifikasi pertanyaan kode-golf di masa depan :)
sumber
LWP::Simple
merupakan bagian dari inti Perl, setidaknya di v5.12.3.Python 3.x: 407 karakter
sumber
JavaScript (422)
Bekerja dalam versi interpreter SpiderMonkey yang digunakan oleh golf anarki dan ideone .
Sedikit lebih baik diformat:
sumber
0
trik untuk menginisialisasii
untuk0
hanya 2 byte. Punya +1Vim, 373 penekanan tombol
Lucu bagaimana eksponensial yang berebut.
sumber
C (gcc) ,
429424 byte-5 bytes berkat ceilingcat
Cobalah online!
sumber
Ruby, 436 karakter
sumber
Scala (
706619599550 karakter)Menggunakan peta alih-alih foreach memungkinkan untuk menekan lebih banyak karakter ... Dalam codegolf, kami tidak peduli dengan kinerja, keanggunan (non-mutability) atau logika ...
sumber
tinta ,
370369354 byteCobalah online!
Penjelasan
sumber
Haskell,
515498Skor tidak menghitung baris baru dan ruang yang ditambahkan untuk presentasi.
Tidak Disatukan:
sumber
(++)
dengan pengidentifikasi yang lebih pendek mungkin merupakan ide yang bagus.#
operator atau yang serupaPython, 484
Ok, saya melakukannya tetapi cukup membosankan ...
Kalimat terakhir selalu dengan "terbang" sehingga beberapa karakter dihapus ...
Versi yang kurang golf:
sumber
C, untuk bersenang-senang (561 karakter)
Skor tidak menghitung baris baru dan ruang yang ditambahkan untuk presentasi.
Terima kasih kepada JB untuk perbaikannya!
sumber
&
dan[]
?&
s ketika menggunakan pointer dan tidak berhasil: P. JB, saya tidak tahu metode yang tidak memerlukan pengindeksan (dan menggunakan lebih banyak karakter).C #, 556 karakter
sumber
Perl, 489 karakter
sumber
PHP , 344 byte
Cobalah online!
PHP , 405 byte
Cobalah online!
sumber
Bubblegum, 255 byte
sumber
Python 2 ,
453 442 427387 byte£
digunakan sebelumnya adalah char byte ganda !!swallow
singkatanin
dan"..."
dihapusCobalah online!
sumber
~
alih-alih£
(yang panjangnya dua byte bukan ASCII).in
dan string literal.Groovy, 475 byte
Tidak ada yang terlalu menarik, hanya banyak interpolasi string. Kiat-kiat golf yang satu ini dipersilakan!
sumber
tcl, 451 byte
Tersedia untuk dijalankan di: http://rextester.com/live/GXF89639 (upaya ke-10)
sumber
Bahasa Wolfram (Mathematica) , 295 byte
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 variabeltext
dan jalankankemudian jalankan file yang dihasilkan pada command-line dengan
sumber
Java 758 karakter
Ini adalah upaya Java saya (758 karakter)
sumber
Java, 655 byte
Ini adalah versi golf dari jawaban ini . Ada lebih dari 100 byte yang disimpan pada hal-hal kecil.
sumber
public
dapat dihapus;class M{public static void main
bisainterface M{static void main
;String S=...,T=...,e=...;String[]a=...;String[]q=...;
bisaString S=...,T=...,e=...,a[]=...,q[]=...;
;for(int i=0;...)...for(int j=i
bisafor(int i=0,j;...)...for(j=i
;for(j=i;j>0;j--)...a[j]...a[j-1]
bisafor(j=i;j>0;)...a[j]...[a--j]
;static void p(String v){...}
bisastatic<T>void p(T v){...}
( 623 bytes ) Cobalah secara online.Arang ,
369366 byteCobalah online!
Tautan ke versi verbose kode.
sumber
PowerShell , 512 byte
Cobalah online!
Kredit ke @Chirishman untuk pos mereka .
sumber
Stax , 195 byte
Jalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
PowerShell , 349 byte = Skrip: 9 + Arsip: 340
Cobalah online!
Skrip Powershell untuk membuat arsip
t
(lihat TIO):sumber