এই চ্যালেঞ্জের উদ্দেশ্যটি হ'ল নিম্নলিখিত নির্বাচনের একটি অসম্ভব সংক্ষিপ্ত বাস্তবায়ন p
, আপনার পছন্দের ল্যাজেজে। এটি এখানে সি কোড কার্যকর করছে (এটি
টিআইও লিঙ্কটি দেখুন যা এটির আউটপুটগুলিও প্রিন্ট করে) এবং এতে উইকিপিডিয়া পৃষ্ঠা রয়েছে।
unsigned char pi[] = {
252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77,
233,119,240,219,147,46,153,186,23,54,241,187,20,205,95,193,
249,24,101,90,226,92,239,33,129,28,60,66,139,1,142,79,
5,132,2,174,227,106,143,160,6,11,237,152,127,212,211,31,
235,52,44,81,234,200,72,171,242,42,104,162,253,58,206,204,
181,112,14,86,8,12,118,18,191,114,19,71,156,183,93,135,
21,161,150,41,16,123,154,199,243,145,120,111,157,158,178,177,
50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87,
223,245,36,169,62,168,67,201,215,121,214,246,124,34,185,3,
224,15,236,222,122,148,176,188,220,232,40,80,78,51,10,74,
167,151,96,115,30,0,98,68,26,184,56,130,100,159,38,65,
173,69,70,146,39,94,85,47,140,163,165,125,105,213,149,59,
7,88,179,64,134,172,29,247,48,55,107,228,136,217,231,137,
225,27,131,73,76,63,248,254,141,83,170,144,202,216,133,97,
32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82,
89,166,116,210,230,244,180,192,209,102,175,194,57,75,99,182,
};
unsigned char p(unsigned char x) {
return pi[x];
}
কি p
p
দুটি রাশিয়ান ক্রিপ্টোগ্রাফিক মানের একটি উপাদান, হ্যাশ ফাংশন স্ট্রিবগ এবং ব্লক সাইফার কুজনিচিক । ইন এই নিবন্ধটি (এবং ISO সভাগুলোতে), এই আলগোরিদিম ডিজাইনার দাবি করেন যে তারা অ্যারে উত্পন্ন pi
র্যান্ডম 8-বিট একাধিক বিন্যাসন অবচয় দ্বারা।
"অসম্ভব" বাস্তবায়ন
আছে বিটগুলিতে 16 2 1684 অনুমান। অতএব, প্রদত্ত এলোমেলো অনুক্রমের জন্য, এমন একটি প্রোগ্রাম যা এটি বাস্তবায়ন করে তার 1683 বিটের চেয়ে কম বিট প্রয়োজন হবে না বলে আশা করা যায় না।
তবে, আমরা একাধিক অস্বাভাবিক ছোট বাস্তবায়ন পেয়েছি (যা আমরা এখানে তালিকাবদ্ধ করি ), উদাহরণস্বরূপ নিম্নলিখিত সি প্রোগ্রাম:
p(x){unsigned char*k="@`rFTDVbpPBvdtfR@\xacp?\xe2>4\xa6\xe9{z\xe3q5\xa7\xe8",l=0,b=17;while(--l&&x^1)x=2*x^x/128*285;return l%b?k[l%b]^k[b+l/b]^b:k[l/b]^188;}
যার মধ্যে কেবল 158 টি অক্ষর রয়েছে এবং এটি 1264 বিটের মধ্যে ফিট করে। এটি কাজ করে তা দেখতে এখানে ক্লিক করুন ।
আমরা একটি "অসম্ভব" সংক্ষিপ্ত বাস্তবায়ন সম্পর্কে কথা বলি কারণ, যদি অনুমতিটি কোনও র্যান্ডম প্রক্রিয়ার আউটপুট হয় (যেমন এটির ডিজাইনাররা দাবি করেছেন), তবে এই সংক্ষেপে একটি প্রোগ্রাম উপস্থিত না থাকত ( আরও বিশদগুলির জন্য এই পৃষ্ঠাটি দেখুন)।
রেফারেন্স বাস্তবায়ন
পূর্ববর্তী সি কোডটির আরও পঠনযোগ্য সংস্করণটি হ'ল:
unsigned char p(unsigned char x){
unsigned char
s[]={1,221,146,79,147,153,11,68,214,215,78,220,152,10,69},
k[]={0,32,50,6,20,4,22,34,48,16,2,54,36,52,38,18,0};
if(x != 0) {
unsigned char l=1, a=2;
while(a!=x) {
a=(a<<1)^(a>>7)*29;
l++;
}
unsigned char i = l % 17, j = l / 17;
if (i != 0) return 252^k[i]^s[j];
else return 252^k[j];
}
else return 252;
}
সারণীটি k
এমন যে k[x] = L(16-x)
, যেখানে L
অর্থে লিনিয়ার এটি L(x^y)==L(x)^L(y)
এবং যেখানে সি এর মতো, ^
এক্সওআরকে বোঝায়। তবে আমরা আমাদের বাস্তবায়ন সংক্ষিপ্ত করার জন্য এই সম্পত্তিটির উত্তোলন করতে পরিচালনা করি না। আমরা কোনও কাঠামো সম্পর্কে সচেতন নই যাতে s
এটি একটি সহজ বাস্তবায়ন করতে পারে --- এর আউটপুট সবসময় সাবফিল্ডে থাকে, অর্থাত্ যেখানে সীমাবদ্ধ ক্ষেত্রটিতে ক্ষয়ক্ষতি সম্পন্ন হয়। অবশ্যই, আপনার যদি কোনও সন্ধান করা s
উচিত তবে আপনি একটি সহজ অভিব্যক্তি ব্যবহার করতে একেবারেই মুক্ত !
থিম লুপটি 256 টি উপাদান সহ সসীম ক্ষেত্রে একটি পৃথক লোগারিদমের মূল্যায়নের সাথে সম্পর্কিত। এটি একটি সাধারণ ব্রুট-ফোর্স অনুসন্ধানের মাধ্যমে কাজ করে: ডামি ভেরিয়েবলটি a
সীমাবদ্ধ ক্ষেত্রের জেনারেটর হিসাবে সেট করা থাকে এবং ফলাফলটি সমান না হওয়া পর্যন্ত এটি এই জেনারেটরের দ্বারা গুণিত হয় x
। যখন এটি হয়, আমাদের এটির l
স্বতন্ত্র লগ x
। এই ফাংশনটি 0 তে সংজ্ঞায়িত করা হয়নি, তাই বিশেষ if
বিবৃতিটি বয়ান সম্পর্কিত।
unsigned char
a
a=(a<<1)^(a>>7)*(256^29)
a
int
l=1,a=2
l=255
x
পূর্ববর্তী সংক্ষিপ্ত বাস্তবায়নটি পেতে আমাদের বেশিরভাগ অপ্টিমাইজেশনের একটি লিখনআপ সহ আরও আরও বিশদ আমাদের কাগজেp
উপস্থাপন করা হয়েছে ।
বিধি
এমন কোনও প্রোগ্রামের প্রস্তাব করুন যা ফাংশনটি p
1683 বিটেরও কম প্রয়োগ করে । প্রোগ্রামটি যত খাটো হবে তত বেশি অস্বাভাবিক, প্রদত্ত ভাষার জন্য আরও খাটো। যদি আপনার ভাষাতে কুজনিফিক, স্ট্রিবগ বা বিল্টিন p
হিসাবে উপস্থিত হয় তবে আপনি সেগুলি ব্যবহার করতে পারবেন না।
আমরা সর্বোত্তম বাস্তবায়ন নির্ধারণ করতে যে মেট্রিকটি ব্যবহার করি তা হ'ল বাইটগুলিতে প্রোগ্রামের দৈর্ঘ্য। আমরা আমাদের একাডেমিক কাগজে বিট-লেংথ ব্যবহার করি তবে সরলতার জন্য আমরা এখানে বাইটগুলিতে লেগে থাকি।
আপনার ভাষা ফাংশন, আর্গুমেন্ট বা আউটপুট একটি স্পষ্ট ধারণা না থাকে, এনকোডিং নির্ধারণ করতে আপনার ব্যাপার, কিন্তু মান এনকোডিং মত ঠাট pi[x]
যেমন x
স্পষ্টত নিষিদ্ধ করা হয়।
আমরা ইতিমধ্যে এই বিষয়ে আমাদের অনুসন্ধানের সাথে একটি গবেষণা পত্র জমা দিয়েছি। এটি এখানে পাওয়া যায় । যাইহোক, এটি কোনও বৈজ্ঞানিক স্থানে প্রকাশ করা উচিত, আমরা সার্থকভাবে সেরা বাস্তবায়নের লেখককে স্বীকৃতি জানাব।
যাইহোক, এই প্রশ্নের খসড়া তৈরি করার সময় তাঁর সহায়তার জন্য xnor ধন্যবাদ!
1683 bits at most
একটি কঠোর বাধা [sic?] বা লক্ষ্য?