পটভূমি
বিল এবং জন দুজন লোক আছেন। তার মধ্যে একটি নাইট, যা সর্বদা সত্য বলে, এবং অন্যটি একটি ছুরি, যা সর্বদা মিথ্যা বলে। আপনি জানেন না কে নাইট আর কে ছুরি। তারপরে প্রত্যেক ব্যক্তি কারা ছুরি এবং নাইট সে সম্পর্কে বিভিন্ন বিবৃতি দেয়। এই তথ্যটি ব্যবহার করে, আপনাকে অবশ্যই সিদ্ধান্তে পৌঁছাতে হবে যে নাইট কে এবং কারা ছুরি।
নাইট এবং Knaves যুক্তিবিজ্ঞান সমস্যা Booleen বীজগণিত উপর ভিত্তি করে। একজন ব্যক্তি যে শব্দগুলি বলেছেন সেগুলি বুলিন সন্তোষজনকতার সমস্যা তৈরি করে। ছুরির বক্তব্য অবশ্যই সর্বদা মিথ্যা এবং অন্য নাইটের বক্তব্য অবশ্যই সর্বদা সত্য হওয়া উচিত।
জন বলেছেন "আমি দুজনেই ছুরি এবং বিল হ'ল ছুরি"। জন যদি নাইট হত তবে এই উক্তিটি মিথ্যা হবে, সুতরাং সে নাইট হতে পারে না। তিনি যদি ছুরি এবং বিল নাইট হন তবে এই বিবৃতিটি এখনও মিথ্যা হবে, এমনকি প্রথম অংশটি সত্য বলেও ভাবা হয়েছিল। সুতরাং, জন ছুরি।
চ্যালেঞ্জ
আপনার চ্যালেঞ্জটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লেখার জন্য যা প্রতিটি ব্যক্তির দেওয়া বিবৃতিগুলির একটি তালিকা নেবে এবং কে ছুরি এবং কে নাইট তা নির্ধারণ করবে। কভার করার জন্য অনেকগুলি বিবরণ রয়েছে, সুতরাং এই সমস্যাটি তিনটি বিভাগে বর্ণিত।
ইনপুট
ইনপুট দুটি লাইনের পরে একটি নতুন লাইন হবে। প্রতিটি লাইন একটি চরিত্রের নাম দেবে, তার পরে একটি কোলন থাকবে, তারপরে সেই ব্যক্তির দ্বারা বর্ণিত বিভিন্ন বাক্য থাকবে। যদি কোনও ব্যক্তি নাইট হয়, তবে তার সমস্ত বাক্য সত্য হবে এবং ছুরিটির সমস্ত বাক্যই মিথ্যা হবে। একটি বাক্যের প্রথম অক্ষর সর্বদা মূলধন করা হবে এবং প্রতিটি বাক্য একটি সময়ের সাথে শেষ হবে। এখানে একটি উদাহরণ:
Joe: Both I am a knight and neither Steve is a knave nor I am a knave.
Steve: Joe is a knave. Either Joe is a knight or I am a knight.
পদান্বয়
প্রতিটি বাক্যে কমপক্ষে একটি ধারা থাকে। প্রতিটি অনুচ্ছেদে কয়েকটি জিনিসের একটি রয়েছে (আশা করি আপনি আমার স্বরলিপিটি বুঝতে পারেন):
both [clause] and [clause]
either [clause] or [clause]
neither [clause] nor [clause]
[I am | (other person's name) is] a [knight | knave]
এটি স্পষ্টতই এটি পোলিশ স্বরলিপির সাথে সমান উপায়ে বোঝা যায়। এখানে একটি বাক্য উদাহরণ:
Both I am a knight and neither Steve is a knave nor I am a knave.
বুলিয়ান বীজগণিত অনুবাদ সহজ সরল। "উভয়" বিবৃতিগুলি ANDs, "উভয়" বিবৃতিটি XORs, এবং "উভয়ই" বিবৃতিগুলি NORs নয়।
(I am a knight) AND ((Steve is a knave) NOR (I am a knave))
আউটপুট
আউটপুট দুটি লাইন নিয়ে গঠিত। প্রতিটি লাইনে একটি ব্যক্তির নাম থাকে (ক্রমানুসারে) এবং তারপরে সে নাইট বা ছুরি কিনা তা বলে। সর্বদা একটি নাইট এবং একটি ছুরি থাকবে। উপরের উদাহরণের জন্য আউটপুট এখানে দেওয়া হল:
Joe is the knave.
Steve is the knight.
যদি সমস্যাটি অলসযোগ্য হয় (তবে আপনি যা বলতে পারেন তা কোনটি নয়, বা এর কোনও সমাধান নেই), তবে আপনার প্রোগ্রামটি বৈধ আউটপুট উত্পাদনের জন্য এক্সসেসিপি কিছু করতে পারে।
আরও উদাহরণ
ইনপুট
Sir Lancelot: Either both I am a knight and Merlin is a knave or both I am a knave and Merlin is a knight.
Merlin: Either both I am a knight and Sir Lancelot is a knight or both I am a knave and Sir Lancelot is a knave.
আউটপুট
Sir Lancelot is the knight.
Merlin is the knave.
ইনপুট
David: Neither I am a knave nor Patrick is a knight. Either I am a knight or Patrick is a knave.
Patrick: Either I am a knight or both I am a knight and David is a knight.
আউটপুট
David is the knave.
Patrick is the knight.
ইনপুট
Lizard: I am a knight.
Spock: I am a knave.
একটি সম্ভাব্য আউটপুট
Rock Paper Scissors
বিধি, প্রবিধান এবং নোট
- স্ট্যান্ডার্ড কোড গল্ফ বিধি প্রযোজ্য
- আপনার প্রোগ্রামটি কেবল প্রিন্টযোগ্য এএসসিআইআই দিয়ে তৈরি করা উচিত
- সমস্ত ইনপুট এবং আউটপুট STDIN এবং STDOUT থেকে হবে