শর্টেস্ট টার্মিনেটিং প্রোগ্রামের ফলোআপ হিসাবে যার আউটপুট আকার গ্রাহামের সংখ্যা এবং গল্ফ ট্রির (3) এর চেয়ে বড় সংখ্যার বেশি , আমি একটি নতুন চ্যালেঞ্জ উপস্থাপন করছি।
লোডার সংখ্যাটি খুব বড় সংখ্যক, এটি ব্যাখ্যা করা একরকম কঠিন (যেহেতু এটি নিজেই একটি নমনীয় লক্ষ্যের সাথে কোড গল্ফিং অনুশীলনের ফলাফল)। এখানে একটি সংজ্ঞা এবং ব্যাখ্যা রয়েছে , তবে স্ব-সংযোজনের উদ্দেশ্যে, আমি পরে এই পোস্টে এটি ব্যাখ্যা করার চেষ্টা করব।
ব্যবহৃত অ্যালগরিদম রাল্ফ লোডার এখন পর্যন্ত লিখিত যেকোনও (গণনাযোগ্য) অ্যালগরিদমের বৃহত্তম সংখ্যার একটি উত্পাদন করে! প্রকৃতপক্ষে, লোডারের সংখ্যাটি গুগোলজি উইকির বৃহত্তম "গণনাযোগ্য" নম্বর। ("গণনীয়" সংখ্যার দ্বারা, তারা একটি গণনার শর্তাবলী অনুসারে সংখ্যার অর্থ বোঝায়)) এর অর্থ হ'ল উত্তর যদি লোডারের সংখ্যার চেয়ে বড় একটি সংখ্যা আকর্ষণীয় উপায়ে উত্পন্ন করে (যেমন কেবল লোডার সংখ্যা + 1 নয়) তবে আপনি নীচে যেতে পারেন গুগোলজির ইতিহাস! বলা হচ্ছে, যে প্রোগ্রামগুলি লোডারের নম্বর + 1 এর মতো কিছু উত্পাদন করে তা অবশ্যই এই প্রশ্নের বৈধ উত্তর এবং প্রার্থী; শুধু কোন খ্যাতি আশা করবেন না।
আপনার কাজ হ'ল একটি সমাপ্তি প্রোগ্রাম তৈরি করা যা লোডার সংখ্যার চেয়ে বড় সংখ্যা তৈরি করে । এটি কোড-গল্ফ , তাই সংক্ষিপ্ততম প্রোগ্রামটি জয়ী!
- আপনাকে ইনপুট নেওয়ার অনুমতি নেই।
- আপনার প্রোগ্রামটি শেষ পর্যন্ত নিরঙ্কুশভাবে শেষ করতে হবে তবে আপনি ধরে নিতে পারেন মেশিনটির অসীম স্মৃতি রয়েছে।
- আপনি ধরে নিতে পারেন যে আপনার ভাষার নম্বরের ধরণটি যে কোনও সীমাবদ্ধ মান রাখতে পারে তবে এটি আপনার ভাষায় ঠিক কীভাবে কাজ করে তা ব্যাখ্যা করা দরকার (উদা: একটি ভাসা কি অসীম নির্ভুলতা রাখে?)
- ইনফিনিটগুলি আউটপুট হিসাবে অনুমোদিত নয়।
- একটি সংখ্যার ধরণের আন্ডারফ্লো একটি ব্যতিক্রম ছুঁড়ে দেয়। এটি চারপাশে মোড়ানো হয় না।
- আপনার নম্বরটি কেন এত বড় এবং আপনার সমাধানটি কার্যকর কিনা তা পরীক্ষা করার জন্য আপনার কোডটির একটি বর্ণহীন সংস্করণ আপনাকে সরবরাহ করতে হবে (যেহেতু লোডার নম্বর সংরক্ষণের জন্য পর্যাপ্ত মেমরিযুক্ত কোনও কম্পিউটার নেই)।
সুতরাং এখানে লোডার নম্বর ব্যাখ্যা। দেখুন http://googology.wikia.com/wiki/Loader%27s_number এবং তাতে আরও ভালো বিস্তারিত জানার জন্য লিঙ্ক। বিশেষত, এটিতে এমন একটি প্রোগ্রাম রয়েছে যা লোডারটির সংখ্যাটি হুবহু (সংজ্ঞা দ্বারা) উত্পাদন করে।
বাক্য এর ক্যালকুলাস মূলত খুব বিশেষ বৈশিষ্ট্য সঙ্গে একটি প্রোগ্রামিং ভাষা।
প্রথমত, প্রতিটি সিন্ট্যাক্টিক্যালি বৈধ প্রোগ্রামটি সমাপ্ত হয়। কোনও অসীম লুপ নেই। এটি খুব কার্যকর হবে, কারণ এর অর্থ হ'ল আমরা যদি নির্মাণের প্রোগ্রামের একটি স্বেচ্ছাসেবী ক্যালকুলাস চালাই তবে আমাদের প্রোগ্রামটি আটকে যাবে না। সমস্যাটি হ'ল এটি বোঝায় যে নির্মাণের ক্যালকুলাস টিউরিং সম্পূর্ণ নয়।
সর্বোপরি, অ-টিউরিং সম্পূর্ণ ভাষাগুলির মধ্যে এটি অন্যতম শক্তিশালী। মূলত, আপনি যদি প্রমাণ করতে পারেন যে একটি টুরিং মেশিন প্রতিটি ইনপুটটিতে থামবে, আপনি নির্মাণের ক্যালকুলাসে কোনও ফাংশন প্রোগ্রাম করতে পারেন যা এটি অনুকরণ করে। (এটি এটিকে ট্যুরিং সম্পূর্ণ করে দেয় না, কারণ সেখানে থামানো টিউরিং মেশিন রয়েছে যা আপনি প্রমাণ করতে পারবেন না যে থামানো হচ্ছে))
লোডারের নম্বরটি মূলত নির্মাণের ক্যালকুলাসের জন্য একটি ব্যস্ত বিভার নম্বর, যা সমস্ত কক প্রোগ্রাম সমাপ্ত হওয়ার পরে গণনা করা সম্ভব।
বিশেষত, loader.c একটি ফাংশন সংজ্ঞায়িত করে D
। আনুমানিকভাবে, D(x)
সমস্ত বিট-স্ট্রিং এর চেয়ে কম পরিমাণে পুনরাবৃত্তি হয়x
, তাদের একটি কক প্রোগ্রাম হিসাবে ব্যাখ্যা করে, সিনট্যাক্টিক্যালি বৈধ প্লেগুলি চালায় এবং ফলাফলগুলি (যা বিটস্ট্রিংসও হবে) তেমন আলোচনা করে। এটি এই উপসংহারটি ফেরত দেয়।
লোডার নাম্বার D(D(D(D(D(99)))))
।
গুগোলোলজি উইকি থেকে কোডটির আরও পাঠযোগ্য অনুলিপি
int r, a;
P(y,x){return y- ~y<<x;}
Z(x){return r = x % 2 ? 0 : 1 + Z (x / 2 );}
L(x){return x/2 >> Z(x);}
S(v,y,c,t){
int f = L(t);
int x = r;
return f-2 ? f>2 ? f-v ? t-(f>v)*c : y : P(f,P(S(v,y,c,L(x)), S(v+2,t=S(4,13,-4,y),c,Z(x)))) : A(S(v,y,c,L(x)),S(v,y,c,Z(x)));
}
A(y,x){return L(y)-1 ? 5<<P(y,x) : S(4,x,4,Z(r));}
D(x)
{
int f;
int d;
int c=0;
int t=7;
int u=14;
while(x&&D(x-1),(x/=2)%2&&(1)){
d = L(L(D(x))),
f = L(r),
x = L(r),
c - r||(L(u)||L(r)-f||(x/=2)%2&&(u=S(4,d,4, r),t=A(t,d)),f/2&(x/=2)%2&&(c=P(d,c),t=S(4,13,-4,t),u=S(4,13,-4,u))),
c&&(x/=2)%2&&(t=P(~u&2|(x/=2)%2&&(u=1<<P(L(c),u)),P(L(c),t)),c=r)
u/2&(x/=2)%2&&(c=P(t,c),u=S(4,13,-4,t),t=9);
}
return a = P( P( t, P( u, P( x, c)) ),a);
}
main(){return D(D(D(D(D(99)))));}