लक्ष्य
प्रभावी ढंग से काम करने से LZMA2 को रोकने के इरादे से सामूहिक रूप से विघटन और फ़ाइलों को ठीक करने वाले प्रोग्राम या जोड़ी बनाएं। विघटन और फिक्स रूटीन पारस्परिक होना चाहिए, ताकि आप मूल फ़ाइल को ठीक से पुनर्प्राप्त कर सकें।
लक्ष्य
- सादा UTF-8 (5,589,891 बाइट्स) में शेक्सपियर के एकत्रित कार्य
- विकिमीडिया कॉमन्स 2013 पूर्ण संकल्प पर वर्ष की तस्वीर (1,659,847 बाइट्स)
संपीड़न के तरीके
- Ubuntu / संबंधित:
xz -kz5 <infile>
- खिड़कियाँ:
7z.exe a -txz -mx5 <outfile> <infile>
- अन्य: संपीड़न स्तर 5 के साथ एक LZMA2 कंप्रेसर का उपयोग करें जो शेक्सपियर के कार्यों को 1570550 बाइट्स the 100 बाइट्स तक संपीड़ित करता है।
स्कोरिंग; योग (सब कुछ बाइट्स में है, ls -l
या dir
यह):
- कार्यक्रम (ओं) का आकार (जो कुछ भी सामूहिक रूप से प्रतिवर्ती "ब्रेक" / फ़ाइल को ठीक करता है)
- बीच का अंतर (पूर्ण):
- रॉ ने शेक्सपियर और आपके संशोधित (असम्पीडित) प्रतिलिपि के कार्यों को एकत्र किया।
- कच्ची तस्वीर और आपकी संशोधित (असम्पीडित) प्रति।
- आकार में अंतर या 0, इनमें से जो भी अधिक हो:
- रॉ ने शेक्सपियर माइनस की अपनी संशोधित, LZMA2 संपीड़ित कॉपी के काम किए।
- अपने संशोधित, LZMA2 संकुचित प्रतिलिपि कच्चे फोटो माइनस।
उदाहरण
खराब स्कोरिंग, आलसी-गोल्फ, लेकिन आज्ञाकारी पायथन 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 स्कोर करेगा।