Stackylogic একটি যুক্তিবিজ্ঞান ভিত্তিক প্রোগ্রামিং ভাষা আমি যে নিতে গঠিত 0
's এবং 1
ইনপুট জন্য' s এবং একটি একক আউটপুট 0
বা 1
উপরে সমাপ্তির।
একটি স্ট্যাকাইলোগিক প্রোগ্রামটি এমন লাইনগুলি নিয়ে গঠিত যা কেবলমাত্র তিনটি অক্ষর 01?
পাশাপাশি <
লাইনগুলির একের শেষে হুবহু একটি ধারণ করে । লাইনস খালি রাখা হতে পারে এবং সঙ্গে সঙ্গতিপূর্ণ <
অন্তত একটি থাকতে হবে 0
, 1
অথবা ?
এটা আগে।
এখানে একটি নমুনা প্রোগ্রাম যা (আমি ব্যাখ্যা করব) দুটি বিটের NAND গণনা করে :
1
?<
11
?
0
স্ট্যাকাইলোগিক প্রোগ্রামের প্রতিটি লাইনকে স্ট্যাক হিসাবে বিবেচনা করা হয়, বামদিকে নীচে এবং ডানদিকে শীর্ষ। স্পষ্টতই, কোনও প্রোগ্রামের প্রথম লাইনের আগে এবং শেষ লাইনের পরে একটি খালি স্ট্যাক (ফাঁকা লাইন) থাকে।
এটি <
, যা আমরা কার্সার বলব , স্ট্যাকাইলোগিক প্রোগ্রামটি চালু হওয়ার পরে স্ট্যাকটি শুরু করতে চিহ্নিত করে। একটি স্ট্যাকাইলোগিক প্রোগ্রামের সম্পাদন নীচে হিসাবে এগিয়ে যায়:
কর্সারটি বর্তমানে নির্দেশ করছে এমন স্ট্যাকের বাইরে শীর্ষ অক্ষরটি পপ করুন।
- চরিত্রটি যদি হয়
?
তবে ব্যবহারকারীকে একটি0
বা একটির জন্য অনুরোধ করুন1
এবং অভিনয় করুন যেন এটি চরিত্র। - চরিত্রটি যদি হয়
0
তবে কার্সারটিকে একটি স্ট্যাক আপ করে নিন (বর্তমান লাইনের উপরে লাইনে)। - চরিত্রটি যদি হয়
1
তবে কার্সারটি একটি স্ট্যাককে নীচে সরান (বর্তমান লাইনের নীচে লাইনে)।
- চরিত্রটি যদি হয়
যদি স্ট্যাকটি কার্সারটিতে চলে যায় তবে এটি ফাঁকা হয়, সর্বশেষ মানটি একটি স্ট্যাক (সর্বদা একটি
0
বা1
) থেকে পপড আউটপুট করুন এবং প্রোগ্রামটি শেষ করুন।অন্যথায়, যদি স্ট্যাকটি কার্সারটি সরানো থাকে তবে এটি খালি নয়, পদক্ষেপ 1 এ ফিরে যান এবং প্রক্রিয়াটি পুনরাবৃত্তি করুন।
লক্ষ্য করুন যে স্ট্যাকাইলোগিক প্রোগ্রামগুলি সর্বদা শেষ হয় কারণ তাদের অবশ্যই শেষ পর্যন্ত তাদের স্ট্যাকগুলি অপসারণ করতে হবে।
নন্দ উদাহরণ
ন্যানড প্রোগ্রামে কার্সারটি একটি থেকে শুরু হয় ?
:
1
?<
11
?
0
আমরা 1
একবার ধরে নেব ব্যবহারকারী একবার ইনপুটগুলি ?
পপ হয়ে গেলে , যার অর্থ কার্সারটি নীচে চলে যাবে, প্রোগ্রামটিকে এইরকম দেখায়:
1
11<
?
0
এখন একটি সমতল 1
কার্সার স্ট্যাকের শীর্ষে। এটি যথাযথভাবে পপ করা হয় এবং কার্সারটি আবার সরে যায়:
1
1
?<
0
Now ব্যবহারকারী ইনপুট অনুমান 0
জন্য ?
কার্সার উপরে উঠানো হবে যার মানে:
1
1<
0
আবার, 1
কার্সার স্ট্যাকের উপরে একটি রয়েছে যাতে কার্সার পপ হয় এবং নীচে চলে যায়:
1
<
0
অবশেষে কার্সার স্ট্যাকটি খালি, সুতরাং শেষ মানটি পপড, the 1
, আউটপুট এবং প্রোগ্রামটি শেষ হয়।
এই NAND গেট কারণ জন্য সঠিক 1 NAND 0
হয় 1
। আপনি যদি পরীক্ষা করে দেখেন তবে অবশ্যই এটি অন্য তিনটি বিট বিট ইনপুটগুলির জন্য কাজ করে।
বা উদাহরণ
এই স্ট্যাকাইলোগিক প্রোগ্রামটি একটি ওআর গেট অনুকরণ করে :
?
?<
এটি সহজেই দেখা যায় যে একটি প্রাথমিক ইনপুট 1
কার্সারটিকে শেষ লাইনের নীচে অন্তর্ভুক্ত ফাঁকা স্ট্যাকের দিকে ঠেলে দেবে, প্রোগ্রামটি শেষ করে এবং আউটপুটটি 1
কেবল ইনপুট ছিল।
অন্যদিকে ইনপুট দেওয়ার জন্য 00
, প্রোগ্রামটি শেষ করে এবং শেষটিকে 0
ইনপুট হিসাবে আউটপুট করে কার্সারটি শীর্ষে অন্তর্নিহিত খালি স্ট্যাকের দিকে যাত্রা করবে ।
চ্যালেঞ্জ
এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা স্ট্যাকাইলোগিক প্রোগ্রামটিকে স্ট্রিং হিসাবে গ্রহণ করে এবং এটি চালায়, মুদ্রণ করে বা ফলাফলটি ফেরত দেয় 0
বা 1
।
এর পরে ?
, আপনি ব্যবহারকারীকে একটি 0
বা 1
ইনপুটের জন্য অনুরোধ করতে পারেন , বা0
' ইনস ' এর প্রিসেট স্ট্রিং থেকে মানটি পড়তে পারেন 1
যা আপনি ইনপুট হিসাবেও নেন । (এটি আপনার প্রোগ্রাম / ফাংশনে অন্য স্ট্রিং ইনপুট হতে পারে বা আপনি প্রোগ্রাম স্ট্রিংয়ের প্রথম বা শেষ লাইনটি ইনপুট স্ট্রিম হিসাবে ধরে নিতে পারেন)।
আপনি প্রোগ্রামটি ধরে নিতে পারেন এবং ইনপুটটি সর্বদা সুগঠিত থাকে। আপনি বৈকল্পিকভাবে ধরে নিতে পারেন ইনপুট প্রোগ্রামগুলি একটি একক পেছনের নতুন লাইনের সাথে এসেছে (যদিও মনে রাখবেন শেষে সর্বদা একটি অন্তর্ভুক্ত ফাঁকা স্ট্যাক থাকে)।
বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।
আরও নমুনা প্রোগ্রাম
ZERO
0<
ONE
1<
BUFFER
?<
NOT
1
?<
0
AND
?<
?
NAND
1
?<
11
?
0
OR
?
?<
NOR
1
?
00
?<
0
XOR(v1)
?
0
1?<
?
0
XOR(v2)
?
?<
11
?
0
XNOR(v1)
1
?
0?<
1
?
XNOR(v2)
1
?
00
?<
?
MEDIAN(v1)
1
???<
0
MEDIAN(v2)
?
1?<
??
মিডিয়ান প্রোগ্রামগুলির জন্য ধন্যবাদ মার্টিন ।
1\???<\0
।
111\???????<\000
।
?\1?<\??
। বিকল্পভাবে, এখানে প্রতিসম 5-লাইন বাস্তবায়ন রয়েছে:?\?0\?<\?1\?