ভূমিকা
সংখ্যার মানগুলি সংশোধন করার ধারণার উপর ভিত্তি করে ফোর্টটি একটি খুব অদ্ভুত রহস্যময় ভাষা। বৈশিষ্ট্য সংখ্যাগুলিতে ধ্রুবক নয় তবে পরিবর্তনশীল, আপনি তাদের LET
নির্দেশকে নতুন মান নির্ধারণ করতে ব্যবহার করতে পারেন ।
উদাহরণস্বরূপ, LET 2=4-1
এখন থেকে নির্বাহের পরে 2
এর মান ধরে নেওয়া হয় 3
যার অর্থ যে যখনই মানটি 2
একটি অভিব্যক্তিতে আসে এটি পরিবর্তে "প্রতিস্থাপিত" হয় 3
। এক্সপ্রেশনটি (1+1)*2
এখন মূল্যায়ন করবে 9
।
ফোর্টের এই নির্দেশাবলী তথ্য সংরক্ষণ এবং প্রবাহ নিয়ন্ত্রণের জন্য উভয়ই ব্যবহৃত হয় (লাইনগুলি সংখ্যাযুক্ত এবং তাদের সংখ্যার মান পরিবর্তন করে আপনি তাদের সম্পাদনের ক্রমটি নির্ধারণ করতে পারেন)। এই চ্যালেঞ্জে আমরা এই দ্বিতীয় দিকটি মোকাবেলা করব না।
চ্যালেঞ্জ
ফোর্টের LET
এক্সপ্রেশনগুলির সরলিকৃত উপসেটের জন্য আপনাকে একটি দোভাষী লিখতে হবে ।
আপনি এই ব্যাকরণটি অনুসরণ করে ইনপুট হিসাবে একাধিক রেখার লাইন পাবেন:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
দ্রষ্টব্য: এই ব্যাকরণটি বৈধ বৈশিষ্ট্য নয় কারণ এতে লাইন নম্বর, এলইটি, এবং প্রথম বন্ধনী নেই (যা সর্বদা বাধ্যতামূলক)
এটি হ'ল, আপনাকে কেবল সংখ্যার সংকলন এবং সংখ্যাকে মান নির্ধারণের সাথে মোকাবেলা করতে হবে। অভিভাবকরা ইনপুটটিতে উপস্থিত হবে না এবং প্রতিটি অভিব্যক্তি বাম থেকে ডানে মূল্যায়ন করা প্রয়োজন: সাবধান থাকুন যে আংশিক ফলাফল পুনরায় সংজ্ঞা দ্বারা প্রভাবিত হয়েছে!
সংখ্যাগুলি সর্বদা আপনার ভাষার স্থানীয় পূর্ণসংখ্যার ধরণের (বা 2 ^ 32, যেটি উচ্চতর হয়) সীমা অবধি অ-নেতিবাচক পূর্ণসংখ্যার হবে।
প্রতিটি লাইনের জন্য আপনাকে প্রকাশের ফলাফল আউটপুট করা উচিত এবং এই ফলাফলটি প্রথম সংখ্যার (সম্ভবত পুনরায় স্বাক্ষরিত) মান নির্ধারণ করা উচিত, যা নিম্নলিখিত রেখাগুলিকে কীভাবে ব্যাখ্যা করা হবে তা প্রভাবিত করবে।
এটি কোড-গল্ফ , সংক্ষিপ্ততম কোড (বাইটে) জয়!
অন্যান্য বিধি
- ইনপুট ফর্ম্যাটটি নমনীয়, আপনি উদাহরণস্বরূপ নিউলাইনগুলি, স্ট্রিংগুলির একটি তালিকা, সংখ্যার তালিকার একটি তালিকা সহ একক স্ট্রিং নিতে পারেন ... আউটপুট একই হয়, যতক্ষণ না এটি পরিষ্কার হয় যতক্ষণ না প্রতিটি এক্সপ্রেশনের ফলাফল কী? ইনপুট.
- আপনি কোনও ফাংশন, একটি সম্পূর্ণ প্রোগ্রাম, বা একটি রেইপিএল পরিবেশে চালানোর জন্য সমাধানটি প্রতিটি লাইনের জন্য একবার কল করে জমা দিতে পারেন।
- স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে, বিশেষত আপনি আপনার কোডটিতে কোনও বহিরাগত ফেটো ইন্টারপ্রেটারকে কল করতে পারবেন না।
উদাহরণ
এগুলি একই ইনপুটটির সমস্ত অংশ। প্রতিটি লাইনের পরে সেই লাইনের সাথে সম্পর্কিত প্রত্যাশিত আউটপুট প্রদর্শিত হয়, কখনও কখনও কোনও মন্তব্য প্রাসঙ্গিক পুনঃসাইনামগুলি নির্দেশ করে (প্রয়োজনীয় আউটপুটটির অংশ নয়)।
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
বৈধ ("সংখ্যা সর্বদা অ-নেতিবাচক পূর্ণসংখ্যার হবে")
0
একটি বৈধ নম্বর?