LZMA2 সংক্ষেপণটি ব্যর্থ করুন


11

লক্ষ্য

LZMA2 কে কার্যকরভাবে কাজ করতে বাধা দেওয়ার অভিপ্রায় নিয়ে একটি প্রোগ্রাম বা জুড়ি তৈরি করুন যা সম্মিলিতভাবে বাধা দেয় এবং ফাইলগুলি ঠিক করে দেয়। বিঘ্নিত এবং স্থির রুটিনগুলি অবশ্যই পারস্পরিক হতে হবে, যাতে আপনি মূল ফাইলটি পুনরুদ্ধার করতে পারেন।

লক্ষ্যগুলি

সংকোচন পদ্ধতি

  • উবুন্টু / সম্পর্কিত: 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 স্কোর করে না।

2
ট্রোলিংয়ের উত্তর: পদক্ষেপ 1 - তারপরে এন ডি পাওয়ার জন্য আপনার ফাইলের আকারের চেয়ে কতটুকু ফ্রি ডিস্ক স্পেস রয়েছে তা নিয়ে কাজ করুন Step পদক্ষেপ 2 - ফাইলটি নিজেকে এন বার সংযুক্ত করুন এবং এন নম্বরটি সংযোজন করুন Step পদক্ষেপ 3 - উপলব্ধি করুন যে সেখানে আছে ফাইল সংকোচনের জন্য কোনও স্থান অবশিষ্ট নেই তবে বেশ কয়েকটি টেরাবাইটের (বা আরও) ফাইলের আকারে এক সম্পূর্ণ পার্থক্য শেষ হতে পারে .... [বিপরীত করতে, ফাইলের শেষ থেকে এনটি পড়ুন এবং ফাইলটিকে 1 / Nth আকারে সঙ্কুচিত করুন। ]
এমটি0

@ এমটি0: আহ আমি মনে করি সমাধানটি হ'ল পার্থক্যগুলি পরম হওয়া উচিত নয় । যদি আপনার পরিবর্তিত ফাইলটি বড় হয় তবে পয়েন্টগুলি বিয়োগ করা উচিত।
ক্লাদিউ

@ এমটি0 যদি আপনি ফাইলটিকে একটি টেরাবাইট বৃহত্তর করে তুলতে পরিবর্তন করেন তবে আপনার স্কোর 1 টেরাবাইট হবে ... আপনি যখন গল্ফ দেওয়ার চেষ্টা করছেন তখন খুব খারাপ।
নিক টি

@ এমটি0 আমি পোস্টে একটি স্পষ্টতা যোগ করেছি, তা কি সহায়তা করে?
নিক টি

2
এক বোতল সংক্ষিপ্তকারক আরও বড় ফাইল তৈরি করতে পারে যদি টি বিশেষত সংকোচনে থাকে। এক্ষেত্রে আপনার পুরষ্কার হওয়া উচিত, শাস্তি দেওয়া উচিত নয়?
ক্লাউডিয়ু

উত্তর:


8

পাইথন, স্কোর = 120

import sys,hashlib
i=0
for c in sys.stdin.read():sys.stdout.write(chr(ord(c)^ord(hashlib.md5(str(i)).digest()[0])));i+=1

কাউন্টার মোডে এমডি 5 ব্যবহার করে একটি এক-সময় প্যাড তৈরি করে । এটির সাথে ফাইলটি xors করে। এর সুবিধা রয়েছে যে মূল এবং ব্যাহত হওয়া ফাইলগুলি একই আকার এবং বিঘ্নকারী এবং ফিক্সার একই প্রোগ্রাম।

সংকুচিত বিঘ্নিত ফাইলগুলি মূলগুলির চেয়ে বড়।


আমি স্কোরিং সামঞ্জস্য করেছি তাই যদি জিপ করা ফাইলগুলি তাদের মূল অংশের চেয়ে বড় হয় তবে আপনি শাস্তিপ্রাপ্ত হন না এবং সেগুলি কেবল স্কোর হয় 0.. আপনার ফাইলগুলির মধ্যে কোন পার্থক্য ছিল তা নিশ্চিত নন তবে আপনি স্কোরটি আপডেট করতে চাইতে পারেন
নিক টি

@ নিকট: আপডেট হয়েছে।
কিথ র্যান্ডাল

8

সি, 51 = 51 + 0 + 0 + 0 + 0

main(c){for(;c=~getchar();putchar(~c^rand()>>23));}

গল্ফ ট্রিক্সের অধীনে , এই প্রোগ্রামটি প্রতিটি বাইটের জন্য স্ট্যান্ডার্ড ইনপুটটিতে লুপ করে এবং র্যান্ড () থেকে অসীম প্যাড সহ একচেটিয়া-বা করে does আমি ওপেনবিএসডি 5.5 এর libc এ র্যান্ড () দিয়ে এটি পরীক্ষা করেছি।

ব্যবহার:

./scramble <orig >scrambled
./scramble <scrambled >orig.copy

আমার প্রোগ্রামটি পরীক্ষা করার জন্য, আমি আমার প্রোগ্রামটি সংকলন করতে এবং আমার স্কোর গণনা করতে একটি শেল স্ক্রিপ্ট টেস্ট.শ (57 লাইন) লিখেছি

$ sh test.sh
[1/4] Compiling scramble...
/tmp//ccbcB43x.o(.text+0x6): In function `main':
: warning: rand() isn't random; consider using arc4random()
[2/4] Scrambling files...
[3/4] Compressing scrambled files...
[4/4] Checking descrambler...
SCORE: 51=51+0+0+0+0
You may wish to rm -rf tmp.9Tjw89dgCs
$ ls -l tmp.9Tjw89dgCs/
total 43032
-rw-r--r--  1 kernigh  kernigh  1659874 May 28 17:23 filament.jpg.cp
-rw-r--r--  1 kernigh  kernigh  1659874 May 28 17:23 filament.jpg.sc
-rw-r--r--  1 kernigh  kernigh  1660016 May 28 17:23 filament.jpg.sc.xz
-rw-r--r--  1 kernigh  kernigh  5589891 May 28 17:23 pg100.txt.cp
-rw-r--r--  1 kernigh  kernigh  5589891 May 28 17:23 pg100.txt.sc
-rw-r--r--  1 kernigh  kernigh  5590232 May 28 17:23 pg100.txt.sc.xz
-rwxr-xr-x  1 kernigh  kernigh     8564 May 28 17:23 scramble

র‌্যান্ড () এবং ডান শিফট সম্পর্কে নোট

যে কোনও সংক্ষেপণ অ্যালগরিদম এলোমেলো ডেটা সংকুচিত করতে পারে না। আমি pg100.txt এবং filament.jpg এলোমেলো ডেটা হিসাবে ছদ্মবেশ ধারণ করতে পারি যদি আমি তাদের স্ট্রিম সাইফার দিয়ে স্ক্র্যাম্ব করি তবে

আমার প্রথম ধারণা একচেটিয়া বা ছিল প্লেইন সঙ্গে প্যাড করতে ciphertext , তারপর উভয় সংরক্ষণ ciphertext এবং প্যাড scrambled ফাইলে। এটি ফাইলের আকার বাড়িয়ে তুলবে এবং আমার স্কোর বাড়িয়ে তুলবে। সুস্পষ্ট পছন্দটি হ'ল প্রতিটি ফাইলের জন্য একই প্যাড ব্যবহার করা এবং স্ক্র্যাম্বলড ফাইলে কেবল সাইফারেক্সট সংরক্ষণ করা। যদি আমি কেবল র‌্যান্ড () কল করি তবে এটি 1 এর একটি ডিফল্ট বীজ ব্যবহার করে এবং একই প্যাড তৈরি করে প্রতিবার করে।

মধ্যে OpenBSD 5.5 সংজ্ঞায়িত RAND () stdlib.h এবং rand.c :

/* from stdlib.h */
#define RAND_MAX    0x7fffffff

/* from rand.c */
static u_int next = 1;

int
rand_r(u_int *seed)
{
    *seed = *seed * 1103515245 + 12345;
    return (*seed % ((u_int)RAND_MAX + 1));
}

int
rand(void)
{
    return (rand_r(&next));
}

এটি লিনিয়ার কংগ্রেসিভ জেনারেটর । বড় ত্রুটিটি হ'ল কম বিটগুলির স্বল্প কাল হয়। 1 ম বিটের সময়কাল 2 হয়: আপনি যদি একটি মুদ্রাটি ফ্লিপ করেন তবে rand()&1এটি মাথা, লেজ, মাথা, লেজ, ইত্যাদি যেতে পারে। নবম বিটের সময়কাল 2 এন হয় । এখানে 31 বিট রয়েছে, তাই পুরো ক্রমটির সময়কাল 2 31 হয়

LZMA2 স্বল্প সময়ের মধ্যে নিদর্শনগুলি খুঁজে পেতে এবং সেগুলি সংকোচন করতে পারে। সংক্ষিপ্ততম কোডটি ~c^rand()কম 8 টি বিট নেয় এবং সংকোচনে রোধ করে না। সঠিক শিফট ~c^rand()>>9সাহায্য করে, তবে পর্যাপ্ত নয়। আমি ব্যবহার ~c^rand()>>23

  • ~c স্কোর: 4227957 = 40 + 0 + 0 + 4019391 + 208526
  • ~c^rand() স্কোর: 2474616 = 47 + 0 + 0 + 2463735 + 10834
  • ~c^rand()>>9 স্কোর: 350717 = 50 + 0 + 0 + 350667 + 0
  • ~c^rand()>>23 স্কোর: 51 = 51 + 0 + 0 + 0 + 0

5

ব্রেনফাক : 129 (129 + 0 + 0 + 0 + 0) *

random.bf (পাঠযোগ্যতার জন্য লাইনফিড যোগ করা হয়েছে)

,+[->>>>++[<++++++++[<[<++>-]>>[>>]+>>+[-[->>+<<<[<[<<]<
+>]>[>[>>]]]<[>>[-]]>[>[-<<]>[<+<]]+<<]<[>+<-]>>-]<[-<<+
>>]<<.,+[->]>>>]]

তৈরি করতে unrandom.bfআপনাকে দ্বিতীয় লাইনে শেষ + পরিবর্তন করতে হবে।

কোডটির বেশিরভাগটি ড্যানিয়েল বি ক্রিস্টোফানির রুল 30 ভিত্তিক র্যান্ডম নম্বর জেনারেটরের উপর ভিত্তি করে প্রতিটি ইনপুটটিতে নম্বর যুক্ত করতে এবং যখন আর কোনও ইনপুট থাকে না তখন শেষ করতে হয়।

* আমি এ পর্যন্ত 212992 (12 ঘন্টা পরে প্রক্রিয়াজাত) প্রক্রিয়াকৃত বাইটগুলি পরীক্ষা করেছি এবং উভয় ফাইলই 213064 সংক্ষেপিত ফাইলে পরিণত হয়েছে। আমার ধারণা হ'ল এটি সপ্তাহের শেষের দিকে নিশ্চিত হয়ে জানার জন্য হয়ে গেছে তবে আমি পোস্ট দিয়ে অপেক্ষা করতে চাই না। স্কোরটি ভুল হলে আপডেট করব, তবে সমাধানটি রুল 30 রক থেকে রাখব!

ট্রিভিয়া: বিধি 30 টি 1983 সালে স্টিফেন ওল্ফ্রাম আবিষ্কার করেছিলেন এবং উইকিপিডিয়া অনুসারে এটি ম্যাথেমেটিকায় এলোমেলো পূর্ণসংখ্যার উত্পাদন করতে ব্যবহৃত হয়েছিল।

সংকলন এবং চলমান:

এটি ক্ষতিকারক সময় এবং স্থান ব্যবহার করে (প্রতি প্রক্রিয়া অনুযায়ী আরও 32 টির বেশি কোষের পুনরাবৃত্তি করে) তাই এটির জন্য শেকসপায়ার ফাইলটি এনকোড করার জন্য কমপক্ষে 178,876,517 টি কক্ষ আছে এমন একটি ব্রেইনফাক রানটাইম প্রয়োজন, অ্যাস্কিয়িকে ইউনিকোড হিসাবে বিবেচনা করবেন না, 8 টিরও বেশি বিট কোষ এবং ব্যবহার রয়েছে ইওফ হিসাবে -1 (255 এবং -1 এর মধ্যে পার্থক্য করতে)। আমি সাধারণত অন্যের দোভাষী ব্যবহার করি তবে এবার আমাকে প্লাগ হতে হবে এবং নিজের প্রচার করতে হবে:

jitbf --eof -1 -b 16 -c 200000000 random.bf < pg100.txt > pg100.txt.ran
jitbf --eof -1 -b 16 -c 200000000 random.bf < Glühwendel_brennt_durch.jpg > Glühwendel_brennt_durch.jpg.ran

jitfb BrainFuck কে অপ্টিমাইজড সিতে সংকলন করে এবং এটি চালানোর জন্য পার্ল ইনলাইন :: সিটিকে গালি দেয়। এটি আমার বর্ধিত ব্রেইনফাক সংকলক সহ বান্ডিল । আর্গুমেন্টে কক্ষের আকার এবং প্রস্থের সাথে এটি প্রায় 400MB বরাদ্দ করবে।


3

সিজেম, 22 বাইট

G,~q{5$H$+255%_@^o}/];

এটি পুনরাবৃত্ত সম্পর্কের সাথে একটি লেগড ফিবোনাচি জেনারেটর ব্যবহার করে এস এন = (এস এন -5 + এস এন -16 )% 255 (যা আমি ভুলক্রমে নির্বাচিত করেছি, তবে এটি তবুও কাজ করে) এবং বাইটের সিউডো-এলোমেলো স্ট্রিম তৈরি করতে একটি তুচ্ছ বীজ ব্যবহার করে যা এটি পরে ইনপুট দিয়ে XORs করে।

আমি সিজেএম 0.6 দিয়ে আমার কোডটি পরীক্ষা করেছি , যা 1 মে, 2014 এ প্রকাশিত হয়েছিল।

কিভাবে এটা কাজ করে

G,~                    e# Dump 0, 1, ... and 15 on the stack.
   q                   e# Read from STDIN.
    {             }/   e# For each character in the input.
     5$H$              e# Copy the sixth and 19th element from the stack.
         +255%         e# Push their sum modulo 255.
              _@       e# Duplicate and rotate the character on top.
                ^o     e# XOR and print.
                    ]; e# Clear the stack.

স্কোর

$ LANG=en_US
$ alias cjam='java -jar /usr/local/share/cjam/cjam-0.6.jar'
$ cjam thwart.cjam < pg100.txt > pg100.txt~
$ cjam thwart.cjam < pg100.txt~ > pg100.txt~~
$ diff -s pg100.txt pg100.txt~~
Files pg100.txt and pg100.txt~~ are identical
$ cjam thwart.cjam < Gluehwendel_brennt_durch.jpg > Gluehwendel_brennt_durch.jpg~
$ cjam thwart.cjam < Gluehwendel_brennt_durch.jpg~ > Gluehwendel_brennt_durch.jpg~~
$ diff -s Gluehwendel_brennt_durch.jpg Gluehwendel_brennt_durch.jpg~~
Files Gluehwendel_brennt_durch.jpg and Gluehwendel_brennt_durch.jpg~~ are identical
$ xz -kz5 pg100.txt~ Gluehwendel_brennt_durch.jpg~
$ wc -c thwart.cjam pg100.txt* Gluehwendel_brennt_durch.jpg*
      22 thwart.cjam
 5589889 pg100.txt
 5589889 pg100.txt~
 5589889 pg100.txt~~
 5590232 pg100.txt~.xz
 1659874 Gluehwendel_brennt_durch.jpg
 1659874 Gluehwendel_brennt_durch.jpg~
 1659874 Gluehwendel_brennt_durch.jpg~~
 1660016 Gluehwendel_brennt_durch.jpg~.xz
28999559 total

3

পিএইচপি, 117 + 0 + 0 + 0 + 0 = 117

কারণ আপনি কি অন্য কোনও ভাষার স্বীকৃতি ছাড়াই আপনার ডেটা ম্যাংগলিংয়ের কাজটি অর্পণ করবেন?

<?=substr(gmp_export(gmp_invert(2*gmp_import($s=stream_get_contents(STDIN))+1,$m=2*gmp_pow(256,strlen($s)))/2+$m),1);

যদিও অন্যান্য সমস্ত সমাধানগুলি "র্যান্ডম সংখ্যা জেনারেটর" বা "সামরিক-গ্রেড ক্রিপ্টোগ্রাফি" এর মতো "সুরক্ষিত" নির্মাণের উপর ভিত্তি করে তৈরি করা হয়েছে, এটির মধ্যে কেবল বিজোড় সংখ্যাগুলি মডুলো 2-256 ^ দৈর্ঘ্যের প্রতিনিধিত্ব করে স্ট্রিংগুলি ব্যাখ্যা করা হয় এবং তাদের মডুলার বিপরীত গণনা করা হয় ।

ডেমো:

$ php thwart.php < 100.txt.utf-8 > 100.txt.utf-8~
$ php thwart.php < 100.txt.utf-8~ > 100.txt.utf-8~~
$ diff -s 100.txt.utf-8 100.txt.utf-8~~
Files 100.txt.utf-8 and 100.txt.utf-8~~ are identical
$ php thwart.php < Glühwendel_brennt_durch.jpg > Glühwendel_brennt_durch.jpg~
$ php thwart.php < Glühwendel_brennt_durch.jpg~ > 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 100.txt.utf-8~ Glühwendel_brennt_durch.jpg~
$ wc -c *
 5589889 100.txt.utf-8
 5589889 100.txt.utf-8~
 5590232 100.txt.utf-8~.xz
 5589889 100.txt.utf-8~~
 1659874 Glühwendel_brennt_durch.jpg
 1659874 Glühwendel_brennt_durch.jpg~
 1660016 Glühwendel_brennt_durch.jpg~.xz
 1659874 Glühwendel_brennt_durch.jpg~~
     117 thwart.php
28999654 total

2

শেল স্ক্রিপ্ট, 203

id|gpg --batch --passphrase-fd 0 --personal-compress-preferences Uncompressed $1 $2

এটি চালানো:

% sh break.sh -c pg100.txt                       
% sh break.sh -d pg100.txt.gpg > pg100.txt-original
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
% diff -s pg100.txt pg100.txt-original
Files pg100.txt and pg100.txt-original are identical
% sh break.sh -c Glühwendel_brennt_durch.jpg
% sh break.sh -d Glühwendel_brennt_durch.jpg.gpg > Glühwendel_brennt_durch.jpg-original
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
% diff -s Glühwendel_brennt_durch.jpg Glühwendel_brennt_durch.jpg-original
Files Glühwendel_brennt_durch.jpg and Glühwendel_brennt_durch.jpg-original are identical
% xz -kz5 Glühwendel_brennt_durch.jpg.gpg 
% xz -kz5 pg100.txt.gpg 
% ls -ln
total 28340
-rw-r--r-- 1 1000 1000      84 May 24 04:33 break.sh
-rw-r--r-- 1 1000 1000 1659874 Jan 19 17:22 Glühwendel_brennt_durch.jpg
-rw-r--r-- 1 1000 1000 1659943 May 24 04:46 Glühwendel_brennt_durch.jpg.gpg
-rw-r--r-- 1 1000 1000 1660084 May 24 04:46 Glühwendel_brennt_durch.jpg.gpg.xz
-rw-r--r-- 1 1000 1000 1659874 May 24 04:46 Glühwendel_brennt_durch.jpg-original
-rw-r--r-- 1 1000 1000 5589891 May 24 03:55 pg100.txt
-rw-r--r-- 1 1000 1000 5589941 May 24 04:43 pg100.txt.gpg
-rw-r--r-- 1 1000 1000 5590284 May 24 04:43 pg100.txt.gpg.xz
-rw-r--r-- 1 1000 1000 5589891 May 24 04:43 pg100.txt-original

খুব পোর্টেবল নয়, তবে কয়েকটা বাইটের দামে তৈরি করা যেতে পারে। পিজিপি প্রয়োজন (ওপেনএসএসএল দিয়ে একটি বাস্তবায়নও সম্ভব হবে)। এনকোডযুক্ত ফাইল এবং আসল মধ্যে ~ 50 বাইট পার্থক্য সম্ভবত সংরক্ষণ করা যেতে পারে।

স্কোরিং:

84 + অ্যাবস (1659874 - 1659943) + সর্বাধিক (1659874 - 1660084, 0) + অ্যাবস (5589891 - 5589941) + সর্বাধিক (5589891 - 5590284, 0) = 203


1

পাইথন, স্কোর = 183 + 7 + 6 + 0 + 0 = 196

স্কোরিংটি ফাইলটিকে সম্পূর্ণ সঙ্কোচনীয় করার জন্য আপনাকে শাস্তি দেয়, তারপরে সংক্ষেপিত ফাইলটি সংকোচনের ওভারহেড থেকে বড়। সুতরাং আমার প্রোগ্রাম এগুলিকে সম্পূর্ণ কমপ্রেসিভের চেয়ে কিছুটা কম করে তোলে:

import sys
from random import randint as J,seed
x=sys.stdin.read()
seed(ord(x[1]))
n=int(2362*J(1,2)**2.359)
sys.stdout.write(x[:n]+''.join(chr(ord(c)^J(0,255))for c in x[n:]))

ফলাফল:

Laxori@Laxori-PC /cygdrive/f/Programming/lzkill
$ cat photo.jpg | python break.py > photo.jpg~; cat photo.jpg~ | python break.py > photo.jpg~~; diff photo.jpg photo.jpg~~; xz -kz5 photo.jpg~

Laxori@Laxori-PC /cygdrive/f/Programming/lzkill
$ cat pg100.txt | python break.py > pg100.txt~; cat pg100.txt~ | python break.py > pg100.txt~~; diff pg100.txt pg100.txt~~; xz -kz5 pg100.txt~

Laxori@Laxori-PC /cygdrive/f/Programming/lzkill
$ ls -l
total 28337
----------+ 1 Laxori mkpasswd     183 2014-05-24 13:43 break.py
----------+ 1 Laxori mkpasswd 5589891 2014-05-23 19:19 pg100.txt
-rw-r--r--+ 1 Laxori mkpasswd 5589891 2014-05-24 13:45 pg100.txt~
-rw-r--r--+ 1 Laxori mkpasswd 5589884 2014-05-24 13:45 pg100.txt~.xz
-rw-r--r--+ 1 Laxori mkpasswd 5589891 2014-05-24 13:45 pg100.txt~~
----------+ 1 Laxori mkpasswd 1659874 2014-05-23 19:19 photo.jpg
-rw-r--r--+ 1 Laxori mkpasswd 1659874 2014-05-24 13:44 photo.jpg~
-rw-r--r--+ 1 Laxori mkpasswd 1659880 2014-05-24 13:44 photo.jpg~.xz
-rw-r--r--+ 1 Laxori mkpasswd 1659874 2014-05-24 13:44 photo.jpg~~

Laxori@Laxori-PC /cygdrive/f/Programming/lzkill
$ python
Python 2.5.2 (r252:60911, Dec  2 2008, 09:26:14)
[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 183 + abs(5589891-5589884) + abs(1659874-1659880)
196

বর্তমান নিয়মগুলির সাথে, একটি সংকোচিত ফাইলের পরিমাণ বেশি হওয়ার জন্য কোনও জরিমানা নেই। নিয়ম কি বদলে গেল? যদি তা হয় তবে এই পরিবর্তনটি এই প্রোগ্রামটির সাথে অন্যায় ছিল।
কের্নে

@ কর্নিগ: হ্যাঁ আমি এটি পোস্ট করার পরে তারা পরিবর্তন হয়েছিল। সত্যিই তাদের এখন থেকেই শুরু হওয়া উচিত ছিল।
ক্লাদিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.