Tantangan:
Tantangan Anda (jika Anda memilih untuk menerimanya) adalah untuk mengompresi dan mendekompres 5MB " Complete Works of William Shakespeare " seperti yang ditemukan di sini: http://www.gutenberg.org/cache/epub/100/pg100.txt
(MD5: a810f89e9f8e213aebd06b9f8c5157d8
)
Aturan:
- Anda harus mengambil input via
STDIN
dan output melaluiSTDOUT
... - ... dan Anda harus memberikan hasil dekompresi yang identik ke input.
- (Ini artinya Anda harus dapat
cat inpt.txt | ./cmprss | ./dcmpress | md5
dan mendapatkan MD5 yang sama seperti di atas.) - (Apa pun via
STDERR
harus dibuang.)
- (Ini artinya Anda harus dapat
Anda harus menggunakan kurang dari 2048 karakter untuk total kode sumber Anda.- (Ini bukan kode-golf. Anda tidak sedang mencetak berdasarkan panjang source-code. Ini
adalahhanya sebuah aturan untuk menjaga hal-hal yang terbatas.) (Ambil panjang gabungan semua kode sumber jika Anda telah membaginya.)
- (Ini bukan kode-golf. Anda tidak sedang mencetak berdasarkan panjang source-code. Ini
- Anda harus dapat (secara teoritis) memproses input teks biasa yang serupa juga.
- (mis. pengkodean keras suatu mekanisme yang hanya mampu menghasilkan input Shakespeare yang disediakan tidak dapat diterima.)
- (Ukuran terkompresi dari dokumen lain tidak relevan - asalkan hasil dekompresi identik dengan input alternatif.)
- Anda dapat menggunakan pilihan bahasa apa pun.
- (mis. merasa bebas untuk kompres menggunakan
awk
dan dekompresi menggunakanjava
)
- (mis. merasa bebas untuk kompres menggunakan
- Anda dapat menulis dua program terpisah atau menggabungkannya dengan beberapa bentuk "saklar" sesuka Anda.
- (Harus ada demonstrasi yang jelas tentang cara menjalankan mode kompresi dan dekompresi)
- Anda tidak boleh menggunakan perintah eksternal apa pun (misalnya melalui
exec()
).- (Jika Anda menggunakan bahasa shell - maaf. Anda harus puas dengan built-in. Anda dapat memposting jawaban "tidak dapat diterima" demi berbagi dan kesenangan - tetapi itu tidak akan dinilai! )
- Anda tidak boleh menggunakan fungsi yang disediakan built-in atau pustaka siapa yang menyatakan tujuannya adalah untuk kompres data (seperti
gz
, dll)- (Mengubah pengkodean tidak dianggap sebagai kompresi dalam konteks ini. Beberapa kebijaksanaan mungkin diterapkan di sini. Jangan ragu untuk menyatakan penerimaan solusi Anda dalam pengiriman.)
- Cobalah bersenang-senang jika memilih untuk berpartisipasi!
Semua kompetisi yang baik memiliki definisi objektif tentang kemenangan; jadi:
- Asalkan semua aturan dipatuhi, output terkompresi terkecil (dalam
STDOUT
byte) menang.- (Laporkan hasil Anda, harap melalui
./cmprss | wc -c
)
- (Laporkan hasil Anda, harap melalui
- Jika terjadi pengundian (ukuran output identik), sebagian besar komunitas yang terpilih akan menang.
- Dalam hal pengundian kedua (pemungutan suara komunitas identik), saya akan memilih seorang pemenang berdasarkan pemeriksaan subjektif sepenuhnya keanggunan dan kejeniusan murni.
;-)
Cara mengirim:
Harap format entri Anda menggunakan templat ini:
<language>, <compressed_size>
-----------------------------
<description> (Detail is encouraged!)
<CODE...
...>
<run instructions>
Saya akan mendorong pembaca dan submiter untuk berkomunikasi melalui komentar - Saya percaya ada peluang nyata bagi orang untuk belajar dan menjadi programmer yang lebih baik melalui codegolf.stack.
Kemenangan:
Saya akan segera berlibur: Saya mungkin (atau mungkin tidak) memantau pengiriman selama beberapa minggu ke depan dan akan mengakhiri tantangan pada tanggal 19 September. Saya harap ini menawarkan kesempatan baik bagi orang untuk berpikir dan tunduk - dan untuk berbagi teknik dan ide yang positif.
Jika Anda telah mempelajari sesuatu yang baru dari berpartisipasi (sebagai pembaca atau submitter), silakan tinggalkan komentar untuk memberi semangat.
sumber
code-challenge
.Jawaban:
Perl 5, 3651284
Hanya skema kamus berbasis kata yang sederhana. Menganalisis frekuensi kata dari corpus, dan menggunakannya untuk menentukan apakah akan menggunakan satu atau dua byte overhead per kata. Menggunakan dua simbol khusus untuk byte \ 0 dan \ 1 karena tidak muncul di corpus. Ada banyak simbol lain yang bisa digunakan. Ini tidak dilakukan. Tidak melakukan encoding huffman atau jazz apa pun itu.
Script kompresi shakespeare.pl:
Script dekompresi deshakespeare.pl:
Jalankan menggunakan:
sumber