Hedef
LZMA2'nin etkin bir şekilde çalışmasını önlemek amacıyla dosyaları toplu olarak bozan ve düzelten bir program veya program çifti oluşturun. Bozukluk ve düzeltme rutinleri karşılıklı olmalıdır, böylece orijinal dosyayı tam olarak kurtarabilirsiniz.
Hedefler
- Shakespeare'in düz UTF-8'de (5.589.891 bayt) toplanan eserleri
- Wikimedia Commons 2013 Yılın Resmi tam çözünürlükte (1,659,847 bayt)
Sıkıştırma Yöntemleri
- Ubuntu / related:
xz -kz5 <infile>
- Pencereler:
7z.exe a -txz -mx5 <outfile> <infile>
- Diğer: Shakespeare'in çalışmalarını 1570550 bayt ± 100 bayta sıkıştıran sıkıştırma seviyesi 5 olan bir LZMA2 kompresör kullanın.
puanlama; toplamı (her şey bayt cinsinden ls -l
veya dir
bu):
- Program boyutu (geri döndürülebilir biçimde "kırmak" / düzeltmek için toplu olarak ne gerekiyorsa yapın)
- Arasındaki fark (mutlak):
- Shakespeare'in toplanan ham eserleri ve değiştirilmiş (sıkıştırılmamış) kopyanız.
- Ham fotoğraf ve değiştirilmiş (sıkıştırılmamış) kopyanız.
- Aşağıdakiler arasında daha büyük olan boyut veya 0 farkı:
- Shakespeare'in ham toplanmış eserleri, değiştirilmiş LZMA2 sıkıştırılmış kopyanız.
- Ham fotoğraf eksi değiştirilmiş, LZMA2 sıkıştırılmış kopya.
Misal
Düşük puan alan, tembel golf oynayan ancak uyumlu Python 2.x örneği:
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)
Çalıştırılıyor ...
$ 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
Puan
- = 194 + abs (5589891 - 5589891) + max (5589891 - 3014136, 0) + abs (1659874 - 1659874) + max (1659874 - 1646556, 0)
- = 194 + 0 + 2575755 + 0 + 13318
- 2,589,267 bayt. Kötü, ancak dosyalara hiçbir şey yapmamak 4.635.153 baytlık bir puan verir.
açıklama
Bu golf, bu yüzden puanınızı en aza indirmeye çalışıyorsunuz . Yorumların puanlamamda meşru bir deliğe işaret edip etmediğinden veya çok karmaşık yaptığımdan emin olup olmadığından emin değilim. Her durumda, KÜÇÜK :
- kaynak kodu
- sıkıştırılmamış değiştirilmiş dosya ile orijinal dosya arasındaki fark (örneğin, sonuna bir trilyon 0 ekleyerek değiştirirseniz, puanınız bir trilyon bayta yükseldi)
- sıkıştırılmış değiştirilmiş dosya ile orijinal dosya arasındaki fark (örneğin, dosyalar ne kadar sıkıştırılamaz olursa puanınız o kadar yüksek olur). Biraz büyüyen veya hiç büyümeyen mükemmel sıkıştırılamaz bir dosya 0 puan alır.