স্ট্যাকাইলোগিক একটি প্রোগ্রামিং ভাষা যা আমি পূর্ববর্তী চ্যালেঞ্জের মধ্যে দিয়েছিলাম: স্ট্যাকাইলোগিক রান করুন । সম্পূর্ণ বিবরণ এবং উদাহরণের জন্য সেই পোস্টটি পড়ুন, তবে এটি কীভাবে প্যারাফ্রেসড কাজ করে তা এখানে:
স্ট্যাকাইলজিক ইনপুটটির জন্য
0
'গুলি' নেয় এবং1
একক0
বা1
সমাপ্তির পরে আউটপুট দেয় ।একটি প্রোগ্রামে লাইন থাকে যা কেবলমাত্র অক্ষর
01?
পাশাপাশি<
লাইনগুলির একের শেষে থাকে। লাইনস খালি রাখা হতে পারে এবং সঙ্গে সঙ্গতিপূর্ণ<
অন্তত একটি থাকতে হবে0
,1
অথবা?
এটা আগে।এখানে একটি নমুনা প্রোগ্রাম যা দুটি বিটের NAND গণনা করে :
1 ?< 11 ? 0
প্রোগ্রামের প্রতিটি লাইনকে স্ট্যাক হিসাবে বিবেচনা করা হয়, বামদিকে নীচে এবং ডানদিকে শীর্ষ। স্পষ্টতই, কোনও প্রোগ্রামের প্রথম লাইনের আগে এবং শেষ লাইনের পরে একটি খালি স্ট্যাক (অর্থাত্ খালি লাইন) থাকে।
<
, কার্সার নামে চিহ্ন স্ট্যাক শুরু করার জন্য যখন একটি প্রোগ্রাম চালানো হয়। মৃত্যুদন্ড কার্যকর হিসাবে নিম্নলিখিত:
কর্সারটি বর্তমানে নির্দেশ করছে এমন স্ট্যাকের বাইরে শীর্ষ অক্ষরটি পপ করুন।
- চরিত্রটি যদি হয়
?
তবে ব্যবহারকারীকে একটি0
বা একটির জন্য অনুরোধ করুন1
এবং অভিনয় করুন যেন এটি চরিত্র।- চরিত্রটি যদি হয়
0
তবে কার্সারটিকে একটি স্ট্যাক আপ করে নিন (বর্তমান লাইনের উপরে লাইনে)।- চরিত্রটি যদি হয়
1
তবে কার্সারটিকে একটি স্ট্যাক নীচে সরান (বর্তমান লাইনের নীচে লাইনে)।যদি স্ট্যাকটি কার্সারটিতে চলে যায় তবে এটি ফাঁকা হয়, সর্বশেষ মানটি একটি স্ট্যাক (সর্বদা একটি
0
বা1
) থেকে পপড আউটপুট করুন এবং প্রোগ্রামটি শেষ করুন।অন্যথায়, যদি স্ট্যাকটি কার্সারটি সরানো হয় তবে এটি খালি নয়, পদক্ষেপ 1 এ ফিরে যান এবং প্রক্রিয়াটি পুনরাবৃত্তি করুন।
এই চ্যালেঞ্জটির জন্য উপলব্ধি করার মূল বিষয়টি হ'ল সমস্ত স্ট্যাকাইলোগিক প্রোগ্রামগুলি সত্যের টেবিলে সমান । কিছু বুলিয়ান মানগুলির পূর্বনির্ধারিত সংখ্যার ইনপুট এবং ঠিক একটি বুলিয়ান হ'ল নির্ধারিত ফলাফল deter
সুতরাং আপনার কাজটি হ'ল একটি স্ট্যাকাইলোগিক প্রোগ্রাম উত্পাদন করা যা সন্তুষ্ট বা সিমুলেট করে, অর্থাত্ কোনও প্রদত্ত সত্য সারণির মতোই আউটপুট থাকে। তবে এটি স্পষ্ট নয় যে স্ট্যাকাইলজিক কোনও সত্যের ছককে অনুকরণ করতে পারে , সুতরাং এখানে অন্তর্ভুক্তির দ্বারা একটি প্রমাণ রয়েছে :
বেস কেস
দুটি 0 ইনপুট সত্যের টেবিলগুলি সর্বদা আউটপুট
0
বা হয় এমন টেবিলগুলি1
। এই টেবিলগুলির স্ট্যাকাইলোগিক সমতুল্য0<
এবং1<
যথাক্রমে।সূচক পদক্ষেপ
ধরে নিই স্ট্যাকাইলোগিক যে কোনও এন-ইনপুট সত্যের সারণীটি অনুকরণ করতে পারে। এম = এন + 1 দিন
একটি এম-ইনপুট টেবিল, টি, দুটি এন-ইনপুট সারণি, টি 0 এবং টি 1 হিসাবে প্রকাশ করা যেতে পারে , অতিরিক্ত অতিরিক্ত ইনপুট বিট বি যখন বি 0 হয়, তখন টি 0 এর ফলাফল ব্যবহৃত হয়। বি যখন 1 হয়, তখন টি 1 এর ফলাফল ব্যবহৃত হয়।
উদাহরণস্বরূপ, সিউডোকোডের সাথে সম্পর্কিত 3-ইনপুট সত্যের টেবিল
if B: result = x OR y else: result = x NAND y
হয়
B x y | result 0 0 0 | 1 0 0 1 | 1 0 1 0 | 1 0 1 1 | 0 1 0 0 | 0 1 0 1 | 1 1 1 0 | 1 1 1 1 | 1
যা নান্দের জন্য দুটি 2 ইনপুট সত্য টেবিল এবং বা মিউজিং বিট বি দিয়ে একে অপরের উপরে সজ্জিত is
এস 0 এবং এস 1 টি স্ট্যাকাইলোগিক প্রোগ্রাম হোন যা যথাক্রমে টি 0 এবং টি 1 কে সন্তুষ্ট করে (আমরা এগুলি প্রথম অনুমানের ভিত্তিতে জানি)। টি এসকে সন্তুষ্ট করে এমন প্রোগ্রাম এস এর পরে তৈরি করা যেতে পারে:
[lines of S0 excluding the cursor, with 0 appended to all lines below the cursor] ?< [lines of S1 excluding the cursor, with 1 appended to all lines above the cursor]
এই বিন্যাসটি কার্যকরভাবে প্রথম ইনপুট বিটের (লাইন থেকে ) উপর ভিত্তি করে এস 0 এবং এস 1 এর মধ্যে ম্যাক্স করে
?<
। যদি এটি হয়0
তবে কার্সারটি যুক্ত 00
এর আসল কার্সার অবস্থানে এস 0 এর উপরে উঠে যাবে, যা খালি স্ট্যাকের সাহায্যে শীর্ষ এবং নীচে সীমাবদ্ধ থাকবে এবং এইভাবে আসল এস 0 এর সাথে একরকম চলবে । তেমনিভাবে, যদি1
ইনপুট হয় তবে কার্সারটি1
'র ডাউন ডাউন এস 1 ' এর কার্সার অবস্থানে যাবে এবং এটি চালিয়ে যাবে যেমন এটি একা ছিল।উদাহরণস্বরূপ, OR এবং NAND এর জন্য স্ট্যাকাইলোগিক প্রোগ্রামগুলি
? ?<
এবং
1 ?< 11 ? 0
এগুলি একীকরণ করা যায়
if B: result = x OR y else: result = x NAND y
তাই ভালো:
1 ? 110 ?0 00 0 ?< ?1 ?
সুতরাং, কোনও সত্যের টেবিল স্ট্যাকাইলোগিক প্রোগ্রাম দ্বারা সিমুলেটেড করা যায়।
চ্যালেঞ্জ
এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা 2 এন বুলিয়ান মানগুলির একটি তালিকা আকারে একটি এন ইনপুট ট্রুথ টেবিল (এন> 0) নেয় যা বাইনারি ক্রমে টেবিলের আউটপুটগুলি উপস্থাপন করে।
যে কোনও যুক্তিসঙ্গত ইনপুট ফর্ম্যাট ঠিক আছে। যেমন একটি ওআর সত্যের টেবিলের জন্য
x y | OR
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1
ইনপুটগুলির এই স্টাইলগুলির যে কোনওটি ভাল হবে:
0111
0, 1, 1, 1
0
1
1
1
[False, True, True, True]
সত্যের টেবিলটিকে সন্তুষ্ট করে এমন স্ট্যাকাইলোগিক প্রোগ্রাম প্রিন্ট করুন বা প্রত্যাবর্তন করুন, অর্থাত্ একই ইনপুটটি দেওয়া ঠিক একই আউটপুট পেয়েছে। যে সীমাবদ্ধ প্রোগ্রামটি সেই টেবিলটিকে সন্তুষ্ট করে তা বৈধ আউটপুট। আপনার নির্মাণের নির্দেশমূলক প্রমাণের পদ্ধতি অনুসরণ করার দরকার নেই। স্ট্যাকাইলোগিক প্রোগ্রামগুলি সর্বোত্তমভাবে সংক্ষিপ্ত হওয়ার দরকার নেই।
উদাহরণস্বরূপ, যদি ইনপুটটি হয় 11100111
তবে একটি বৈধ আউটপুট হবে
1
?
110
?0
00
0
?<
?1
?
তবে আরও অনেকে আছেন।
বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।
আপনার যদি কোনও অনুবাদকের প্রয়োজন হয় তবে মূল স্ট্যাকাইলজিক চ্যালেঞ্জটি দেখুন ।