বর্ণমালা উপর একটি ব্যাকরণ বিবেচনা করুন { 0
, 1
, ?
, :
} দ্বারা সংজ্ঞায়িত প্রকাশনা নিয়ম
s →
0
┃1
┃0
?
s:
s ┃1
?
s:
s
গুলি থেকে উত্পন্ন একটি স্ট্রিং দেওয়া হয়েছে , যেখানে ?:
এটি ডান-অ্যাসোসিয়েটিভ (উদাহরণস্বরূপ, a?B?X:Y:c?d:e?f:g
অর্থ a?(B?X:Y):(c?d:(e?f:g))
) একটি এক্সপ্রেশন হিসাবে পার্স করুন এবং এটি নিম্নলিখিত শব্দার্থবিজ্ঞানের সাথে মূল্যায়ন করুন:
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
ফলাফল 0 হলে আউটপুট কিছু স্থির মান; যদি আউটপুট 1 হয় , একটি পৃথক নির্দিষ্ট মান আউটপুট দেয়। আপনার উত্তরে আপনার নির্বাচিত আউটপুট মানগুলি উল্লেখ করুন (উদাঃ 0
/ 1
, বা False
/ True
)।
পরীক্ষার মামলা
0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0
বিধি
- আপনি কিছু ভাষা প্রোগ্রামিং ভাষায় স্ট্রিংগুলি কোড হিসাবে ব্যাখ্যা করে এটি চালাতে (যেমন জাভাস্ক্রিপ্ট / পার্ল / রুবি / পাইথনের
eval
) ব্যবহার করতে পারেন' s - এটি বলেছিল, আপনার কোডটি আসলে পার্স করতে হবে না এবং তারপরে ইনপুট স্ট্রিংটি মূল্যায়ন করবে না। সমান ফলাফল অর্জন করতে আপনি যে কোনও পদ্ধতির গ্রহণ করতে পারেন এবং আগের নিয়ম লঙ্ঘন করেন না।
- আপনার প্রোগ্রাম বিরুদ্ধে পরীক্ষা করা হবে
perl -le 'print eval<>'
। - সবচেয়ে সংক্ষিপ্ততম কোড (বাইটে) জিতেছে।
S → T | T ? S : S
, T → 0 | 1
, associativity সম্পর্কে কথা বলতে প্রয়োজন সরানোর?