Tantangan
Tulis program yang mengkompres dan mendekompresi teks ASCII tanpa kehilangan. Ini harus dikhususkan untuk bekerja dengan baik dengan palindrom, termasuk palindrom yang tidak peka huruf besar dan kecil. Kompresi terbaik dengan sumber terkecil menang.
Mencetak gol
total_bytes_saved / sqrt(program_size)
- Kemenangan skor tertinggi
total_bytes_saved
adalah berapa banyak byte lebih kecil dari string yang dikompresi daripada aslinya, total di seluruh test case di bawah ini. program_size
adalah ukuran dalam byte kode sumber dari kedua program kompresi dan dekompresi. Kode yang dibagikan di antara keduanya hanya perlu dihitung satu kali.
Misalnya, jika ada 10 kasus uji dan program 100 byte menyelamatkan 5 byte pada 7 kasus uji, masing-masing 10 dari 2 kasus, tetapi kasus uji terakhir 2 byte lebih lama, solusinya akan mencetak 5,3. ( (7 * 5 + 10 * 2 - 2) / sqrt(100) = 5.3
)
Uji Kasus
tacocat
toohottohoot
todderasesareddot
amanaplanacanalpanama
wasitacaroracatisaw?
Bob
IManAmRegalAGermanAmI
DogeeseseeGod
A Santa at NASA
Go hang a salami! I'm a lasagna hog.
Aturan
- Celah standar berlaku.
- Kompresi harus bekerja pada semua string teks ASCII (byte 32-126, inklusif) yang dapat dicetak, bukan hanya palindrom. Namun sebenarnya tidak perlu menghemat ruang untuk input apa pun.
- Output dapat berupa urutan byte atau karakter, terlepas dari implementasinya atau representasi internal (string, daftar, dan array adalah semua permainan yang adil, misalnya). Jika penyandian ke UTF-8, hitung byte, bukan karakter. String lebar (mis. UTF-16 atau UTF-32) tidak diizinkan kecuali jika satu-satunya codepoint yang mungkin digunakan adalah antara 0 dan 255.
- Kompresi / dekompresi bawaan tidak diizinkan.
Demi kesenangan kita sendiri, posting string terkompresi dengan kode sumber Anda.
UPDATE 1: Skor berubah dari total_bytes_saved / program_size
menjadi total_bytes_saved / sqrt(program_size)
untuk memberi lebih banyak bobot untuk kompresi yang lebih baik dan lebih sedikit berat untuk golf agresif. Sesuaikan skor Anda sesuai.
UPDATE 2: diperbaiki wasitacaroraratisaw?
menjadiwasitacaroracatisaw?
[32-126]
?
1000 *
bagian itu benar-benar diperlukan, dan tidak, saya tidak berpikir itu akan membuat skor terasa lebih "memuaskan";)
wasitacaroraratisaw?
ini adalah contoh tandingan untuk itu