เป้าหมาย
สร้างโปรแกรมหรือคู่ของโปรแกรมที่ทำลายและแก้ไขไฟล์โดยรวมโดยมีเจตนาเพื่อป้องกัน LZMA2 จากการทำงานอย่างมีประสิทธิภาพ รูทีนการรบกวนและแก้ไขต้องเป็นแบบกลับกันดังนั้นคุณสามารถกู้คืนไฟล์ต้นฉบับได้อย่างแน่นอน
เป้าหมาย
- งานที่รวบรวมได้ของเช็คสเปียร์ในUTF-8 ธรรมดา (5,589,891 ไบต์)
- Wikimedia Commons 2013 รูปภาพแห่งปีที่ความละเอียดเต็ม (1,659,847 ไบต์)
วิธีการบีบอัด
- อูบุนตู / เกี่ยวข้อง:
xz -kz5 <infile>
- ของ windows:
7z.exe a -txz -mx5 <outfile> <infile>
- อื่น ๆ : ใช้คอมเพรสเซอร์ LZMA2 พร้อมระดับการบีบอัด 5 ที่บีบอัดงานของเช็คสเปียร์เป็น 1570550 ไบต์± 100 ไบต์
เกณฑ์การให้คะแนน; ผลรวมของ (ทุกสิ่งมีหน่วยเป็นไบต์ls -l
หรือdir
:)
- ขนาดโปรแกรม (สิ่งที่ต้องใช้ร่วมกันเพื่อย้อนกลับ "หยุด" / แก้ไขไฟล์)
- ความแตกต่างในขนาด (แน่นอน) ระหว่าง:
- ผลงานที่รวบรวมได้ของ Shakespeare และสำเนาที่ไม่ได้บีบอัดของคุณ
- รูปภาพดิบและสำเนาที่แก้ไข (ไม่บีบอัด) ของคุณ
- ความแตกต่างในขนาดหรือ 0 แล้วแต่จำนวนใดจะยิ่งใหญ่กว่าระหว่าง:
- ผลงานที่รวบรวมได้ของ Shakespeare ลบสำเนาที่บีบอัด LZMA2 ของคุณ
- ภาพถ่ายดิบลบสำเนาที่บีบอัด LZMA2 ของคุณ
ตัวอย่าง
ให้คะแนนไม่ดีนักกอล์ฟอย่างเฉื่อยชา แต่เป็น Python 2.x ที่สอดคล้องกับมาตรฐาน:
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)
วิ่ง...
$ 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
คะแนน
- = 194 + abs (5589891 - 5589891) + สูงสุด (5589891 - 3014136, 0) + abs (1659874 - 1659874) + สูงสุด (1659874 - 1646556, 0)
- = 194 + 0 + 2575755 + 0 + 13318
- 2,589,267 ไบต์ ไม่ดี แต่การไม่ทำอะไรกับไฟล์ให้คะแนน 4,635,153 ไบต์
การอธิบาย
นี่คือกอล์ฟดังนั้นคุณจึงพยายามลดคะแนนของคุณ ฉันไม่แน่ใจว่าความคิดเห็นนั้นชี้ให้เห็นช่องโหว่ที่ถูกต้องในการให้คะแนนของฉันหรือว่าเป็นเพราะฉันทำให้ซับซ้อนเกินไป ไม่ว่าในกรณีใดคุณต้องการให้เล็กที่สุด :
- รหัสแหล่งที่มา
- ความแตกต่างระหว่างไฟล์ที่แก้ไขแล้วที่ไม่มีการบีบอัดและไฟล์ต้นฉบับ (เช่นหากคุณแก้ไขด้วยการเพิ่ม 0 ล้านล้านต่อท้ายคะแนนของคุณจะเพิ่มขึ้นเป็นล้านล้านไบต์)
- ความแตกต่างระหว่างไฟล์ที่ถูกบีบอัดและไฟล์ต้นฉบับ (เช่นไฟล์ที่บีบอัดไม่ได้จะกลายเป็นคะแนนของคุณยิ่งสูงขึ้น) ไฟล์ที่ไม่สามารถบีบอัดได้อย่างสมบูรณ์แบบที่เพิ่มขึ้นเล็กน้อยหรือไม่มีเลยจะได้คะแนน 0