এই চ্যালেঞ্জের লক্ষ্য হ'ল (শেষ পর্যন্ত) আপনার পছন্দমতো একটি ভাষাতে প্রতিটি সম্ভাব্য থামানো প্রোগ্রাম আউটপুট । প্রথমে এটি অসম্ভব বলে মনে হতে পারে তবে কার্যকর করার আদেশের খুব সতর্কতার সাথে আপনি এটি সম্পাদন করতে পারেন।
এটি চিত্রিত করার জন্য নীচে একটি ASCII চিত্র রয়েছে। কলামগুলি প্রতিটি সম্ভাব্য প্রোগ্রামের একটি সংখ্যা উপস্থাপন করুক (প্রতিটি প্রোগ্রাম একটি সীমাবদ্ধ বর্ণমালা থেকে সীমাবদ্ধ সংখ্যার চিহ্ন)। প্রতিটি সারি সেই প্রোগ্রামটি কার্যকর করার জন্য একক পদক্ষেপের প্রতিনিধিত্ব করুন। একজন X
সেই সময়-পদক্ষেপে সেই প্রোগ্রামের দ্বারা সম্পাদিত সম্পাদনের প্রতিনিধিত্ব করে।
step# p1 p2 p3 p4 p5 p6
1 X X X X X X
2 X X X X X
3 X X X X
4 X X X X
5 X X X
6 X X
7 X X
8 X X
9 X X
∞ X X
যেমন আপনি বলতে পারেন, প্রোগ্রাম 2 এবং 4 থামায় না। আপনি যদি একবারে তাদের সম্পাদন করতে থাকেন তবে আপনার নিয়ামকটি 2 প্রোগ্রামের অসীম লুপটিতে আটকে যেতে পারে এবং কখনই প্রোগ্রাম 3 বা তার বেশি হবে না।
পরিবর্তে, আপনি একটি ডোভেটেলিং পদ্ধতির ব্যবহার করেন । চিঠিগুলি প্রথম 26 টি পদক্ষেপের জন্য কার্যকর কার্যকর আদেশের প্রতিনিধিত্ব করে। *
গুলি জায়গায় যেখানে যে প্রোগ্রাম স্থগিত করেছে এবং outputted হয়। .
গুলি পদক্ষেপ এখনো মৃত্যুদন্ড কার্যকর করা হয় নি হয়।
step# p1 p2 p3 p4 p5 p6
1 A C F J N R V
2 B E I M Q * Z
3 D H * P U
4 G L T Y
5 K O X
6 * S .
7 W .
8 . .
9 . .
∞ . .
লক্ষ্য ভাষার জন্য প্রয়োজনীয়তা
টার্গেট ল্যাঙ্গুয়েজ (যার সমান্তরাল-ব্যাখ্যা করা হচ্ছে) অবশ্যই টিউরিং-সম্পূর্ণ হতে হবে। এগুলি ছাড়াও, এটি টিউরিং-সম্পূর্ণ যে কোনও ভাষা হতে পারে , অনেক বড় ভাষার টুরিং-সম্পূর্ণ সাবসেট সহ। আপনি সাইক্লিক ট্যাগ সিস্টেমের বিধিগুলির মতো বিষয়গুলির ব্যাখ্যা করতেও নির্দ্বিধায়। আপনাকে টেস্ট করার জন্য একটি ভাষা তৈরি করার অনুমতি দেওয়া হয়েছে, যতক্ষণ আপনি এটি দেখাতে পারেন যে এটি কেন টুরিং-সম্পূর্ণ।
উদাহরণস্বরূপ, আপনি যদি ব্রেনফাক পরীক্ষা করতে চান, তবে কেবলমাত্র []-+<>
উপসেটটি পরীক্ষা করা ভাল , যেহেতু ইনপুট সমর্থিত নয় এবং আউটপুট কেবল ফেলে দেওয়া হয়েছে (নীচে দেখুন)।
যখন "কন্ট্রোলার" প্রোগ্রামটি আসে (যা আপনি গল্ফ করছেন), কোনও বিশেষ প্রয়োজনীয়তা নেই। সাধারণ ভাষার সীমাবদ্ধতা প্রযোজ্য।
প্রোগ্রামগুলির অসীম তালিকা কীভাবে তৈরি করবেন
সীমাবদ্ধ বর্ণমালা থেকে বেশিরভাগ প্রোগ্রামিং ভাষার প্রতিনিধিত্ব করা যেতে পারে ite এই ক্ষেত্রে, দৈর্ঘ্য বৃদ্ধির জন্য প্রতিটি সম্ভাব্য প্রোগ্রামের একটি তালিকা গণনা করা তুলনামূলকভাবে সহজ। আপনি যে বর্ণমালাটি ব্যবহার করেন তা লক্ষ্য ভাষার প্রয়োজনীয়তার প্রতিনিধি হওয়া উচিত । বেশিরভাগ ক্ষেত্রে, এটি প্রিন্টযোগ্য এএসসিআইআই। যদি আপনার ভাষা ইউনিকোডকে অতিরিক্ত বৈশিষ্ট্য হিসাবে সমর্থন করে, আপনি ইউনিকোড অক্ষরের প্রতিটি সম্ভাব্য সংমিশ্রণটি পরীক্ষা করবেন না, কেবলমাত্র ASCII। যদি আপনার ভাষা কেবলমাত্র ব্যবহার করে []-+<>
তবে "মন্তব্য" ASCII অক্ষরের বিভিন্ন সংমিশ্রণটি পরীক্ষা করবেন না। এপিএলের মতো ভাষার নিজস্ব বিশেষ বর্ণমালা থাকবে।
আপনার ভাষা যদি ফ্রেট্রান বা টিউরিং মেশিনের মতো কিছু অ বর্ণানুক্রমিক উপায়ে সর্বোত্তমভাবে বর্ণিত হয় তবে সমস্ত সম্ভাব্য বৈধ প্রোগ্রামগুলির একটি তালিকা উত্পন্ন করার জন্য অন্যান্য সমানভাবে বৈধ পদ্ধতি রয়েছে।
প্রোগ্রামগুলির ক্রমবর্ধমান তালিকাটির ব্যাখ্যা করা
এই চ্যালেঞ্জের মূল অংশটি হ'ল প্রোগ্রামগুলির ক্রমবর্ধমান তালিকার জন্য একটি সমান্তরাল দোভাষী লিখতে। এর জন্য কয়েকটি প্রাথমিক পদক্ষেপ রয়েছে:
- তালিকায় একটি সীমাবদ্ধ প্রোগ্রাম যুক্ত করুন
- একটি সীমাবদ্ধ সময়ের জন্য পৃথকভাবে তালিকার প্রতিটি প্রোগ্রামের ব্যাখ্যা করুন। এটি প্রতিটি জন্য একটি নির্দেশ পদক্ষেপ সম্পাদন করে সম্পন্ন করা যেতে পারে। সমস্ত রাজ্য সংরক্ষণ করুন।
- তালিকা থেকে সমস্ত সমাপ্তি / ত্রুটি-নিক্ষেপকারী প্রোগ্রামগুলি সরান
- পরিষ্কারভাবে থামানো * প্রোগ্রামগুলি আউটপুট করুন
- তালিকায় আরও কিছু প্রোগ্রাম যুক্ত করুন
- প্রতিটি প্রোগ্রামকে ঘুরে ফিরে সিমুলেট করুন, পুরানো প্রোগ্রামগুলি যেখানে ছেড়ে গিয়েছিল সেগুলি কার্যকর করা উচিত
- তালিকা থেকে সমস্ত সমাপ্তি / ত্রুটি-নিক্ষেপকারী প্রোগ্রামগুলি সরান
- পরিষ্কারভাবে থামানো * প্রোগ্রামগুলি আউটপুট করুন
- পুনরাবৃত্তি
* আপনার কেবলমাত্র আউটপুট প্রোগ্রামগুলি পরিষ্কারভাবে থামানো উচিত। এর অর্থ হ'ল মৃত্যুদন্ড কার্যকর করার সময় কোনও বাক্য গঠন ত্রুটি বা অজানা ব্যতিক্রম ছিল না। যে প্রোগ্রামগুলি ইনপুট চেয়ে থাকে সেগুলি আউটপুট না করেই শেষ করা উচিত। যদি কোনও প্রোগ্রাম আউটপুট উত্পাদন করে তবে আপনার এটি বন্ধ করা উচিত নয়, কেবল আউটপুট ফেলে দিন।
আরও নিয়ম
- পরীক্ষিত প্রোগ্রামগুলি রাখতে আপনাকে নতুন থ্রেড উত্সাহিত করা উচিত নয়, কারণ এটি হোস্ট ওএস / অন্যান্য সফ্টওয়্যারটির মধ্যে সমান্তরালতার কাজটি লোড করে।
- সম্পাদনা করুন: সম্ভাব্য ভবিষ্যতের লুফোলগুলি বন্ধ করতে, আপনাকে পরীক্ষিত প্রোগ্রামের কোডের
eval
একটি অংশ (বা কোনও সম্পর্কিত ফাংশন) করার অনুমতি দেওয়া হচ্ছে না । আপনি দোভাষী এর কোড থেকে একটি কোডব্লক করতে পারেন । (বিএফ-ইন-পাইথনের উত্তর এখনও এই বিধিগুলির অধীনে কার্যকর)eval
- এটি কোড-গল্ফ
- আপনি যে ভাষায় আপনার জমা লিখবেন সে ভাষাটি আপনি টেস্টিং / আউটপুটিংয়ের ভাষাটির মতো হওয়ার দরকার নেই ।
- আপনার ধরে নেওয়া উচিত যে আপনার উপলব্ধ মেমরিটি সীমাহীন।
- টুরিং-সম্পূর্ণতা প্রমাণ করার সময়, আপনি ধরে নিতে পারেন যে ইনপুটটিকে প্রোগ্রামটিতে হার্ডকোড করা হয়েছে, এবং আউটপুটটি প্রোগ্রামের অভ্যন্তরীণ অবস্থার বাইরে পড়া যায়।
- যদি আপনার প্রোগ্রামটি নিজেই আউটপুট দেয় তবে এটি সম্ভবত ভুল বা বহুভুক্ত।
"If your program outputs itself, it is probably wrong or a polyglot."