লক্ষ্য
LZMA2 কে কার্যকরভাবে কাজ করতে বাধা দেওয়ার অভিপ্রায় নিয়ে একটি প্রোগ্রাম বা জুড়ি তৈরি করুন যা সম্মিলিতভাবে বাধা দেয় এবং ফাইলগুলি ঠিক করে দেয়। বিঘ্নিত এবং স্থির রুটিনগুলি অবশ্যই পারস্পরিক হতে হবে, যাতে আপনি মূল ফাইলটি পুনরুদ্ধার করতে পারেন।
লক্ষ্যগুলি
- প্লেইন ইউটিএফ -8 এ শেক্সপিয়ারের সংগৃহীত কাজগুলি (5,589,891 বাইট)
- উইকিমিডিয়া কমন্স 2013 সম্পূর্ণ রেজোলিউশনে বছরের চিত্র (1,659,847 বাইট)
সংকোচন পদ্ধতি
- উবুন্টু / সম্পর্কিত:
xz -kz5 <infile>
- উইন্ডোজ:
7z.exe a -txz -mx5 <outfile> <infile>
- অন্যান্য: সংক্ষেপন স্তরের 5 সহ একটি এলজেডএমএ 2 সংক্ষেপক ব্যবহার করুন যা শেক্সপিয়ারের কাজগুলিকে 1570550 বাইট ± 100 বাইটে সংকুচিত করে।
স্কোরিং; যোগফল (সমস্ত কিছু বাইটে হয়, ls -l
বা dir
এটি):
- প্রোগ্রাম (গুলি) আকার (বিপরীতে "বিরতি" / ফাইল স্থির করতে সম্মিলিতভাবে যা কিছু লাগে)
- এর মধ্যে আকারের পার্থক্য (পরম):
- শেক্সপীয়রের কাজগুলি এবং আপনার সংশোধিত (সঙ্কুচিত) অনুলিপি কাটা সংগ্রহ করেছে।
- কাঁচা ফটো এবং আপনার সংশোধিত (সঙ্কুচিত) অনুলিপি।
- আকার বা 0 এর মধ্যে পার্থক্য, যার মধ্যে বৃহত্তর:
- শ্যাকস্পিয়ার বিয়োগের কাঁচগুলি আপনার সংশোধিত, এলজেডএমএ 2 সংক্ষেপিত অনুলিপি সংগ্রহ করেছে collected
- কাঁচা ফটো বিয়োগ আপনার পরিবর্তিত, LZMA2 সংক্ষেপিত অনুলিপি।
উদাহরণ
দুর্বলভাবে স্কোরিং, অলস-গল্ফযুক্ত, তবে অনুবর্তী পাইথন ২.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 স্কোর করে না।