Tujuan
Buat program atau pasangan program yang secara kolektif mengganggu dan memperbaiki file dengan maksud mencegah LZMA2 bekerja secara efektif. Mengganggu dan memperbaiki rutinitas harus bersifat timbal balik, sehingga Anda dapat memulihkan file asli dengan tepat.
Target
- Karya-karya Shakespeare yang terkumpul dalam dataran UTF-8 (5.589.891 byte)
- Wikimedia Commons 2013 Picture of the Year pada resolusi penuh (1,659,847 bytes)
Metode Kompresi
- Ubuntu / terkait:
xz -kz5 <infile>
- Windows:
7z.exe a -txz -mx5 <outfile> <infile>
- Lainnya: Gunakan kompresor LZMA2 dengan tingkat kompresi 5 yang mengkompres pekerjaan Shakespeare ke 1570550 byte ± 100 byte.
Mencetak; jumlah (semuanya dalam byte, ls -l
atau dir
itu):
- Ukuran program (apa pun yang diperlukan secara kolektif untuk memulihkan "kerusakan" / memperbaiki file)
- Perbedaan ukuran (absolut) antara:
- Karya Shakespeare yang dikumpulkan dan salinan modifikasi Anda (tidak terkompresi).
- Foto mentah dan salinan Anda yang dimodifikasi (tidak dikompresi).
- Perbedaan ukuran atau 0, mana yang lebih besar antara:
- Karya Shakespeare terkumpul mentah dikurangi salinan LZMA2 terkompresi yang dimodifikasi.
- Foto mentah dikurangi salinan terkompresi Anda, LZMA2.
Contoh
Skor buruk, malas bermain golf, tapi Python 2.x yang patuh contoh:
import sys
x = 7919 if sys.argv[1] == 'b' else -7919
i = bytearray(open(sys.argv[2], 'rb').read())
for n in range(len(i)):
i[n] = (i[n] + x*n) % 256
o = open(sys.argv[2]+'~', 'wb').write(i)
Berlari ...
$ python break.py b pg100.txt
$ python break.py f pg100.txt~
$ diff -s pg100.txt pg100.txt~~
Files pg100.txt and pg100.txt~~ are identical
$ python break.py b Glühwendel_brennt_durch.jpg
$ python break.py f Glühwendel_brennt_durch.jpg~
$ diff -s Glühwendel_brennt_durch.jpg Glühwendel_brennt_durch.jpg~~
Files Glühwendel_brennt_durch.jpg and Glühwendel_brennt_durch.jpg~~ are identical
$ xz -kz5 pg100.txt~
$ xz -kz5 Glühwendel_brennt_durch.jpg~
$ ls -ln
-rw-rw-r-- 1 2092 2092 194 May 23 17:37 break.py
-rw-rw-r-- 1 2092 2092 1659874 May 23 16:20 Glühwendel_brennt_durch.jpg
-rw-rw-r-- 1 2092 2092 1659874 May 23 17:39 Glühwendel_brennt_durch.jpg~
-rw-rw-r-- 1 2092 2092 1659874 May 23 17:39 Glühwendel_brennt_durch.jpg~~
-rw-rw-r-- 1 2092 2092 1646556 May 23 17:39 Glühwendel_brennt_durch.jpg~.xz
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:24 pg100.txt
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:39 pg100.txt~
-rw-rw-r-- 1 2092 2092 5589891 May 23 17:39 pg100.txt~~
-rw-rw-r-- 1 2092 2092 3014136 May 23 17:39 pg100.txt~.xz
Skor
- = 194 + abs (5589891 - 5589891) + maks (5589891 - 3014136, 0) + abs (1659874 - 1659874) + maks (1659874 - 1646556, 0)
- = 194 + 0 + 2575755 + 0 + 13318
- 2.589.267 byte. Buruk, tetapi tidak melakukan apa pun pada file menghasilkan skor 4.635.153 byte.
Klarifikasi
Ini golf, jadi Anda mencoba meminimalkan skor Anda. Saya tidak yakin apakah komentarnya menunjukkan lubang yang sah dalam penilaian saya atau apakah itu karena saya membuatnya terlalu rumit. Bagaimanapun, Anda menginginkan yang TERKECIL :
- Kode sumber
- perbedaan antara file termodifikasi yang tidak terkompresi dan file asli (mis. jika Anda memodifikasinya dengan menambahkan satu triliun pada akhirnya, skor Anda hanya naik satu triliun byte)
- perbedaan antara file termodifikasi yang dikompresi dan file asli (mis. semakin file tidak dapat dikompres, semakin tinggi skor Anda). File yang sangat tidak bisa dimampatkan yang tumbuh sedikit atau tidak sama sekali akan mendapat skor 0.