ভূমিকা
কিপল হ'ল 2003 সালে মার্চ মাসে রুন বার্গ দ্বারা উদ্ভাবিত একটি স্ট্যাক-ভিত্তিক, গুপ্ত প্রোগ্রামিং ভাষা।
কিপলটিতে 27 টি স্ট্যাক, 4 জন অপারেটর এবং একটি নিয়ন্ত্রণ কাঠামো রয়েছে।
স্ট্যাক
স্ট্যাকগুলির নাম দেওয়া হয়েছে a
- z
এবং এতে 32-বিট স্বাক্ষরিত পূর্ণসংখ্যা রয়েছে। @
আউটপুট নম্বরগুলি আরও সুবিধাজনক করার জন্য একটি বিশেষ স্ট্যাকও রয়েছে। যখন কোনও সংখ্যার দিকে ধাক্কা দেওয়া হয় @
, তখন সেই সংখ্যার অঙ্কগুলির ASCII মানগুলি আসলে পরিবর্তে ধাক্কা দেয়। (উদাহরণস্বরূপ, আপনি যদি 12 টি চাপেন তবে @
এটি 49 এবং তারপরে 50 এর @
পরিবর্তে চাপ দেবে ))
i
প্রোগ্রামটি কার্যকর হওয়ার আগে ইনপুটটিকে ইনপুট স্ট্যাকের দিকে ঠেলে দেওয়া হয়। দোভাষী তার i
মৃত্যুদন্ড কার্যকর করার পূর্বে মানগুলি জিজ্ঞাসা করবেন । এক্সিকিউশন শেষ হওয়ার পরে, আউটপুট স্ট্যাকের যে কোনও কিছুই o
ASCII চরিত্র হিসাবে আউটপুটে পপ হয়। যেহেতু এটি কিপলের একমাত্র আইও প্রক্রিয়া, তাই কিপল প্রোগ্রামের সাথে আলাপচারিতা অসম্ভব।
অপারেটর
অপারেন্ড হ'ল স্ট্যাক শনাক্তকারী বা স্বাক্ষরিত 32 বিট পূর্ণসংখ্যা।
পুশ: >
বা<
সিনট্যাক্স: Operand>StackIndentifier
বাStackIndentifier<Operand
পুশ অপারেটর অপারেন্ডটিকে বাম দিকে নিয়ে যায় এবং নির্দিষ্ট স্ট্যাকের উপরে ঠেলে দেয়। উদাহরণস্বরূপ, 12>a
স্ট্যাকের উপর 12 টি ধাক্কা দেবে a
। a>b
স্ট্যাক থেকে শীর্ষতম মানটি পপ করবে a
এবং এটিকে স্ট্যাকের উপরে ঠেলে দেবে b
। একটি খালি স্ট্যাকের পপিং সবসময় ফেরৎ 0. a<b
সমতূল্য b>a
। a<b>c
পপ থেকে আগ মান b
এবং push কর্মের উভয় c
এবং a
।
যোগ করুন +
বাক্য গঠন: StackIndentifier+Operand
অ্যাড অপারেটর স্ট্যাকের শীর্ষস্থানীয় আইটেমের যোগফলটিকে স্ট্যাকের উপরে ঠেলে দেয়। অপারেন্ডটি যদি একটি স্ট্যাক হয়, তবে মানটি এটি থেকে পপ হয়। উদাহরণস্বরূপ, যদি স্ট্যাকের শীর্ষতম মানটি a
1 হয়, তবে a+2
এটি এর উপর 3 টি চাপবে। যদি a
খালি থাকে, তবে a+2
এটির উপরে 2 টি চাপুন। যদি স্ট্যাকের শীর্ষতম মানগুলি হয় a
এবং b
1 এবং 2 হয়, তবে a+b
স্ট্যাক থেকে 2 মানটি পপ করবে b
এবং 3 স্ট্যাকের দিকে ঠেলে দেবে a
।
বিয়োগ: -
বাক্য গঠন: StackIndentifier-Operand
সাবট্র্যাক্ট অপারেটর অ্যাড অপারেটরের মতো হুবহু কাজ করে, এটি যুক্ত করার পরিবর্তে বিয়োগ করে।
পরিষ্কার: ?
বাক্য গঠন: StackIndentifier?
ক্লিয়ার অপারেটর স্ট্যাকটি এর শীর্ষতম আইটেম 0 হলে খালি করে।
অনুবাদক, কিছু যে একটি অপারেটর পাশে নয় উপেক্ষা করা হবে, যাতে নিম্নলিখিত প্রোগ্রাম কাজ করবে: a+2 this will be ignored c<i
। তবে মন্তব্য যুক্ত করার সঠিক উপায় হ'ল #
চরিত্রটি ব্যবহার করে । একটি #
এবং শেষ প্রান্তের অক্ষরের মধ্যে যে কোনও কিছুই কার্যকর করার আগে সরিয়ে ফেলা হয়। এএসসিআইআই অক্ষর # 10 কেপল-এ-লাইনের সমাপ্তি হিসাবে সংজ্ঞায়িত করা হয়েছে।
অপারেটরগুলি দুটি অপারেটর ভাগ করে নিতে পারে, যেমন a>b c>b c?
লিখতে পারে a>b<c?
।
প্রোগ্রাম 1>a<2 a+a
পরিণাম ডেকে আনবে a
মানগুলি রয়েছে [1 4]
(নিচ থেকে উপরের দিকে) এবং [1 3]
। একইভাবে -
অপারেটর জন্য।
নিয়ন্ত্রণ কাঠামো
কিপলে একমাত্র নিয়ন্ত্রণ কাঠামো রয়েছে: লুপ।
বাক্য গঠন: (StackIndentifier code )
যতক্ষণ না নির্দিষ্ট স্ট্যাকটি খালি না থাকে, ততক্ষণ ম্যাচের বন্ধনীগুলির মধ্যে কোডটি পুনরাবৃত্তি হবে। লুপগুলিতে অন্যান্য লুপ থাকতে পারে। উদাহরণস্বরূপ, (a a>b)
স্ট্যাকের সমস্ত মানগুলি স্ট্যাকের a
দিকে সরানো হবে b
, যদিও ক্রমটি বিপরীত হবে । কার্যত অভিন্ন, তবে এটি করার জন্য আরও মার্জিত উপায় (a>b)
।
উদাহরণ
100>@ (@>o)
এই আউটপুট হবে 100
33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o
এটি মুদ্রণ করবে "Hello World!"
। যখন o
স্ট্যাক আউটপুট হচ্ছে, এটি স্ট্যাকের শীর্ষ থেকে নীচে অক্ষরগুলি পপ করতে শুরু করে।
#prime.k by Jannis Harder
u<200
#change 200
k<2>m
u-2
(u-1 u>t u>z u<t
(k>e e+0 e>r)
(e>k)
m+1
m>t
m>z
m<t
t<0>z? t?
1>g
(r>b
m+0 m>a
b+0 b>w
(a-1
b+0 b>j
j?
1>s
(j<0>s j?)
s?
(s<0 w+0 w>b s?)
a>t
a>z
t>a
b-1
b>t
b>z
t>b
z<0>t? z?
a?)
b?
1>p
(b<0 b? 0>p)
p?
(p 0>r? 0>p? 0>g)
)
g?
(g m+0 m>k 0>g?)
u?)
(k>@
10>o
(@>o)
)
এটি একটি প্রাথমিক সংখ্যা জেনারেটর, তবে এটি কীভাবে কাজ করে তা আমি নিশ্চিত নই।
বিধি
আপনাকে অবশ্যই এমন একটি প্রোগ্রাম / ফাংশন লিখতে হবে যা কিপলকে ব্যাখ্যা করে। এই প্রোগ্রাম / ফাংশনটি কোনও সোর্স ফাইলের মাধ্যমে একটি কিপল প্রোগ্রাম পেতে পারে বা সরাসরি ব্যবহারকারীর কাছ থেকে এটি এসটিডিনের মাধ্যমে পেতে পারে। যদি এসটিডিএন উপলভ্য না থাকে তবে এটি অবশ্যই কীবোর্ড ইনপুট থেকে পাওয়া উচিত এবং নির্দিষ্ট অনিদ্রিত অক্ষর প্রবেশ না করা অবধি ইনপুট পাওয়া চালিয়ে যেতে হবে। উদাহরণস্বরূপ, যদি আপনার দোভাষীটি x86 মেশিন কোডে লেখা থাকে তবে এটি কীবোর্ড থেকে অক্ষর অনুসারে কিপল প্রোগ্রামের চরিত্রটি পেতে পারে এবং esc(বা অন্য কোনও কী যা মুদ্রণযোগ্য অক্ষর নির্গত করে না) চাপানো না হওয়া অবধি এটি চালিয়ে যেতে পারে ।
যদি কোনও ত্রুটি থাকে, যেমন একটি সিনট্যাক্স ত্রুটি বা স্ট্যাক ওভারফ্লো, তবে এটি অবশ্যই কোনও উপায়ে স্বীকৃতি দিতে হবে, উদাহরণস্বরূপ 0 এর পরিবর্তে 10 বা দোভাষী / সংকলক দ্বারা উত্পাদিত ত্রুটি বার্তাগুলির মাধ্যমে, তবে বার্তা প্রিন্টিং নয় ।
কোড গল্ফের জন্য অন্য কোনও নিয়মিত নিয়ম এই চ্যালেঞ্জের জন্য প্রয়োগ করে।
আপনার কোড কিপলের নমুনা সংরক্ষণাগারটিতে কয়েকটি উদাহরণ দিয়ে পরীক্ষা করা হবে
এটি একটি কোড-গল্ফ । বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে। শুভকামনা!
নোট করুন যে কিপ্পলে একটি optionচ্ছিক অপারেটর রয়েছে "
তবে এটি স্পেসিফিকেশনের অংশ নয় এবং সরকারী দোভাষীর কেবল একটি অতিরিক্ত বৈশিষ্ট্য। আমি এখানে এটি উল্লেখ করি নি তাই এটি আপনার জমা দেওয়ার ক্ষেত্রে সমর্থন করার দরকার নেই।
নির্দিষ্টকরণের কোনও অংশ সম্পর্কে আপনার যদি সন্দেহ থাকে তবে আপনি এটি জাভাতে লিখিত সরকারী দোভাষী দ্বারা পরীক্ষা করতে পারেন । এটি একটি জিপ ফাইল ডাউনলোড করবে যা সংকলিত প্রোগ্রাম এবং উত্স কোড রয়েছে। এটি জিপিএলের আওতায় লাইসেন্সপ্রাপ্ত।
i
আমি স্টিডিন থেকে উত্স প্রোগ্রামটি নিলে কীভাবে ইনপুট জিজ্ঞাসা করতে পারি ?