পটভূমি
ফ্র্যাক্ট্রান হ'ল জন কনওয়ের দ্বারা উদ্ভাবিত একটি রহস্যময় টুরিং-সম্পূর্ণ প্রোগ্রামিং ভাষা language একটি ফ্র্যাক্ট্রান প্রোগ্রামে ভগ্নাংশের একটি আদেশযুক্ত তালিকা থাকে। প্রোগ্রামটি ইনপুট হিসাবে একক পূর্ণসংখ্যা গ্রহণ করে শুরু হয়। প্রোগ্রামটির প্রতিটি পুনরাবৃত্তি, এটি প্রথম ভগ্নাংশের জন্য তালিকার সন্ধান করে যেমন ভগ্নাংশের মাধ্যমে সংখ্যাটি গুণের ফলে আরও একটি পূর্ণসংখ্যার উত্পাদন হয়। এটি তালিকার শুরুতে আবার শুরু করে নতুন সংখ্যাটি দিয়ে এই প্রক্রিয়াটি পুনরাবৃত্তি করে। তালিকায় কোনও ভগ্নাংশ নেই যা সংখ্যার সাথে গুণিত হতে পারে, প্রোগ্রামটি সমাপ্ত হয় এবং আউটপুট হিসাবে নম্বর দেয়।
ফ্র্যাক্ট্রান টিউরিং-সম্পূর্ণ হওয়ার কারণ এটি একটি রেজিস্টার মেশিনের অনুকরণ করে। সংখ্যার প্রধান গুণনীয়করণ নিবন্ধগুলির বিষয়বস্তু সংরক্ষণ করে, যখন বিভাগ এবং গুণনটি শর্তাধীনভাবে নিবন্ধগুলি থেকে যোগ এবং বিয়োগের একটি উপায়। আমি উইকিপিডিয়া নিবন্ধটি পড়ার সুপারিশ করব (উপরে লিঙ্কিত)।
চ্যালেঞ্জ
আপনার কাজটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লিখতে যা STDIN থেকে তার একমাত্র ইনপুট হিসাবে একটি বৈধ ফ্র্যাক্ট্রান প্রোগ্রাম নিতে পারে এবং ফ্র্যাক্ট্রান প্রোগ্রামকে অনুকরণকারী STDOUT এ একটি বৈধ বিএফ প্রোগ্রাম উত্পন্ন করে। দুটি উপায় রয়েছে যে আপনি বিএফের সাথে ফ্র্যাক্ট্রান প্রোগ্রাম অনুকরণ করতে পারেন।
দ্রষ্টব্য: আপনার উত্তরটি কোনও বিএফ প্রোগ্রাম নয়। আপনার উত্তরটি হ'ল কোড যা কোনও প্রদত্ত ফ্র্যাক্ট্রান প্রোগ্রাম থেকে বিএফ প্রোগ্রাম উত্পন্ন করে। লক্ষ্য হ'ল বিএফ প্রোগ্রামটি ফ্র্যাক্ট্রান প্রোগ্রামের সমতুল্য হয়। (প্রযুক্তিগতভাবে আপনি বিএফ-তে প্রতিযোগিতা করতে পারবেন তবে এটি শক্ত হবে)
বিকল্প 1
আপনার প্রোগ্রামটি এমন একটি বিএফ প্রোগ্রাম আউটপুট করবে যা নিম্নলিখিতগুলি করে:
- সংশ্লিষ্ট ASCII চরিত্রের আকারে (STFIN থেকে বিএফ ইনপুট যেভাবে কাজ করে) আকারে ঠিক 1 নম্বর নেয়, যা ফ্র্যাক্ট্রান প্রোগ্রামের ইনপুট।
- সংশ্লিষ্ট ASCII চরিত্রের আকারে ঠিক 1 নম্বর STDOUT এ মুদ্রণ করে, যা ফ্র্যাক্ট্রান প্রোগ্রাম থেকে আউটপুট।
এই বিকল্পটি হ'ল একটি ফ্র্যাক্ট্রান ভার্চুয়াল মেশিন থেকে সঠিক ইনপুট এবং আউটপুট উপস্থাপন করতে।
বিকল্প 2
আপনার প্রোগ্রামটি যে বিএফ কোড তৈরি করে তা নিম্নলিখিত কাজগুলি করা উচিত:
- ইতিমধ্যে মেমোরিতে এনকোড হওয়া সংখ্যার প্রাথমিক ফ্যাক্টরীকরণ (প্রোগ্রাম চালানোর আগে) রেখে ইনপুট নিন। যদি ইনপুটটি 28 (2 * 2 * 7) হয়, তবে দ্বিতীয় কক্ষে 2 এর মান এবং সপ্তম কক্ষে 1 এর মান (পয়েন্টারটি সেল 0-এ শুরু হবে) থাকবে। অন্যান্য সমস্ত ঘর শূন্য হবে।
- প্রোগ্রামটি শেষ হয়ে গেলে মেমরিতে এনকোড করা আউটপুটটির প্রাথমিক ফ্যাক্টরীকরণের মাধ্যমে আউটপুট দিন। যদি আউটপুট 10 হয়, তবে অবশ্যই প্রতিটি কোষ 2 এবং 5 এর মধ্যে 1 টির মান থাকতে হবে other অন্য সমস্ত মৌলিক সংখ্যাযুক্ত কোষের অবশ্যই শূন্যের মান থাকতে হবে। অন্যান্য কোষের বিষয়বস্তু কোনও বিষয় নয়।
এই বিকল্পটি ফ্র্যাক্ট্রান ভাষার পিছনে কম্পিউটিং মডেলকে উপস্থাপন করে।
বিধি এবং প্রয়োজনীয়তা
- ইনপুট (আপনার প্রোগ্রামের শীর্ষে) STDIN এ ভগ্নাংশের তালিকা হবে। অংক এবং ডিনোমিনেটরের মধ্যে কমা সহ এক লাইন প্রতি ভগ্নাংশ থাকবে। একটি খালি লাইন ইনপুটটির শেষ প্রতিনিধিত্ব করে। ভগ্নাংশ সর্বদা সর্বনিম্ন শর্তে হ্রাস পাবে।
- আপনার প্রোগ্রামের আউটপুটটি একক লাইনের, STDOUT এর জন্য বৈধ BF প্রোগ্রাম হওয়া উচিত। এই প্রোগ্রামটি দুটি বিকল্পের মধ্যে একটি অনুযায়ী সেই নির্দিষ্ট ফ্র্যাক্ট্রান প্রোগ্রামটি অনুকরণ করতে সক্ষম হওয়া উচিত। যে কোনও ইনপুটটির জন্য, উত্পন্ন বিএফ প্রোগ্রামটি ফ্র্যাক্ট্রান প্রোগ্রামের মতো একই আউটপুট উত্পাদন করতে সক্ষম হওয়া উচিত।
- আপনি অবশ্যই পছন্দ করবেন যে বিকল্পটি আপনি বেছে নিয়েছেন।
- আপনি BF মেমরি এবং টেপের সীমানা চয়ন করতে পারেন এবং সেগুলি মোড়ানো হচ্ছে কিনা
- কোড গল্ফ এছাড়াও, আউটপুটযুক্ত বিএফ প্রোগ্রামগুলির আকারের বিষয়টি বিবেচনা করে না, কেবল রূপান্তরকারী প্রোগ্রামের আকার the
- প্রোগ্রামগুলি কেবল প্রিন্টযোগ্য এএসসিআইআই সমন্বিত হওয়া উচিত
আমি যদি কোথাও অস্পষ্ট, জিজ্ঞাসা করতে দ্বিধা করবেন না। এটি বর্ণনা করা খুব জটিল চ্যালেঞ্জ।
এছাড়াও, আপনার প্রোগ্রামটি কাজ করছে কিনা তা যাচাই করার একটি সহজ উপায় সরবরাহ করার জন্য, দয়া করে নীচের ইনপুটটির জন্য আপনার প্রোগ্রামটির উত্পন্ন বিএফ কোড পোস্ট করুন:
33,20
5,11
13,10
1,5
2,3
10,7
7,2
এই প্রোগ্রামটি একটি সংখ্যার বাইনারি প্রসারণে 1 এর সংখ্যা গণনা করে। যাইহোক, ইনপুট এবং আউটপুট অদ্ভুতভাবে ফর্ম্যাট করা হয় (সমস্ত ফ্র্যাক্ট্রান প্রোগ্রামগুলির মতো)। ইনপুটটি 2 2 A ফর্মের হয়, যখন আউটপুট 13 ^ B ফর্মের হয়।