সম্প্রতি পাজলিং.এসই-তে, একটি সমস্যা হয়েছিল যা আমি নির্ধারণ সম্পর্কে লিখেছিলাম যে দুটি সংখ্যক দু'টি বোতল কীভাবে বিষযুক্ত হয় যখন বিষ কেবল তখনই সক্রিয় হয় যদি উভয় উপাদান মাতাল হয়। এটি পুরোপুরি অগ্নিপরীক্ষা হিসাবে শেষ হয়েছিল, বেশিরভাগ লোক একে সম্পূর্ণ আলাদা অ্যালগরিদম ব্যবহার করে ১৮ বা ১৯ জন বন্দীকে নামিয়ে আনতে পরিচালিত করে।
মূল সমস্যার বিবৃতিটি নিম্নরূপ:
আপনি মধ্যযুগীয় রাজ্যের শাসক যিনি নিক্ষেপ দল পছন্দ করেন। যে দরবারটি সর্বশেষে আপনার ওয়াইন বোতলগুলির মধ্যে একটিতে বিষ প্রয়োগ করার চেষ্টা করেছিল তা জানতে পেরে আপনি ক্রুদ্ধ হয়েছিলেন যে আপনি সনাক্ত করতে পেরেছিলেন যে তিনি কেবলমাত্র দশজন বন্দীর সহিত এক হাজারের মধ্যে বোতলকে বিষাক্ত করেছিলেন।
এবার সে কিছুটা কারিগর। তিনি একটি যৌগিক বিষ উদ্ভাবন করেছেন
P
: একটি বাইনারি তরল কেবল মারাত্মক যখন দুটি পৃথক ক্ষতিকারক উপাদান মিশ্রিত হয়; এটি কীভাবে ইপোক্সি কাজ করে তা সাদৃশ্য। তিনি আপনাকে এক হাজার টুকরো 1000 ওয়াইন বোতল প্রেরণ করেছেন। একটি বোতল উপাদানC_a
এবং অন্য একটি উপাদান আছেC_b
। (P = C_a + C_b
)যে কেউ উভয় উপাদান পান করে সে মধ্যরাতের স্ট্রোকের সময় মারা যাবে যেদিন তারা চূড়ান্ত উপাদানটি খেয়েছিল, সে দিনটি কখনই তরলটি নষ্ট করে তা নির্বিশেষে। প্রতিটি বিষ উপাদানগুলি দ্বিতীয় উপাদানটি সক্রিয় না হওয়া পর্যন্ত শরীরে থাকে, সুতরাং আপনি যদি একদিন একটি উপাদান এবং পরের অংশটি পান করেন তবে আপনি দ্বিতীয় দিন শেষে মধ্যরাতে মারা যাবেন।
আপনার পরের পার্টির দু'দিন আগে আপনার আছে। কোন দুটি বোতল কলঙ্কিত রয়েছে তা চিহ্নিত করার জন্য আপনাকে পরীক্ষার জন্য সর্বনিম্ন কতগুলি বন্দি ব্যবহার করতে হবে এবং সেই সংখ্যক বন্দীর সাথে আপনার কী অ্যালগরিদম অনুসরণ করতে হবে?
বোনাস
অতিরিক্তভাবে, মনে করুন যে আপনার নিষ্পত্তিতে 20 বন্দির নির্দিষ্ট সীমা ছিল, আপনি তাত্ত্বিকভাবে পরীক্ষা করতে পারেন এমন বোতলগুলির সর্বাধিক সংখ্যা কত এবং কোন বোতলগুলি প্রভাবিত হয়েছিল সে সম্পর্কে একটি সঠিক সিদ্ধান্তে পৌঁছেছিল?
আপনার কাজ হ'ল বোনাস সমস্যা সমাধানের জন্য একটি প্রোগ্রাম তৈরি করা। n
বন্দীদের দেওয়া , আপনার প্রোগ্রামটি একটি পরীক্ষার সময়সূচী তৈরি করবে যা বোতলগুলির মধ্যে দুটি বিষযুক্ত বোতল সনাক্ত করতে সক্ষম হবে m
, যেখানে m
যতটা সম্ভব বিশাল।
আপনার প্রোগ্রামটি প্রাথমিকভাবে ইনপুট N
নম্বর, বন্দীদের সংখ্যা হিসাবে গ্রহণ করবে । এটি তখন আউটপুট দেবে:
M
, আপনি বোতল সংখ্যা পরীক্ষা করার চেষ্টা করবেন। এই বোতল থেকে লেবেল করা1
হবেM
।N
লাইনগুলি, বোতলগুলির লেবেলযুক্ত প্রতিটি বন্দী পান করবে।
আপনার প্রোগ্রামটি প্রথম ইনপুট হিসাবে প্রথম দিনেই বন্দী মারা গিয়েছিল এবং প্রথম সারিতে থাকা বন্দিটির সাথে 1
পরবর্তী লাইনে থাকবে 2
ইত্যাদি ইনপুট হিসাবে গ্রহণ করবে তারপরে , এটি আউটপুট দেবে:
N
আরও লাইন, বোতলগুলির লেবেলযুক্ত প্রতিটি বন্দী পান করবে। মৃত বন্দীদের ফাঁকা লাইন থাকবে।
তোমার প্রোগ্রাম তারপর ইনপুট বন্দীদের দ্বিতীয় দিনে মারা যান, এবং আউটপুট দুটি সংখ্যার হিসাবে লাগবে, A
এবং B
, প্রতিনিধিত্বমূলক যা দুই বোতল আপনার প্রোগ্রাম মনে বিষ ধারণ করে।
দুটি বন্দী এবং চার বোতল একটি উদাহরণ ইনপুট যেমন বোতল 1
এবং 3
বিষ হয় যদি যেতে পারে :
> 2 // INPUT: 2 prisoners
4 // OUTPUT: 4 bottles
1 2 3 // OUTPUT: prisoner 1 will drink 1, 2, 3
1 4 // OUTPUT: prisoner 2 will drink 1, 4
> 1 // INPUT: only the first prisoner died
// OUTPUT: prisoner 1 is dead, he can't drink any more bottles
3 // OUTPUT: prisoner 2 drinks bottle 3
> 2 // INPUT: prisoner 2 died
1 3 // OUTPUT: therefore, the poisoned bottles are 1 and 3.
The above algorithm may not actually work in all
cases; it's just an example of input and output.
আপনার প্রোগ্রামের পরীক্ষার সময়সূচীটি কার্যকরভাবে প্রতিটি সাবস্ক্রাইড বোতলজাত বোতলটিকে বৈধ জমা দেওয়ার জন্য নির্ধারণ করতে হবে।
আপনার প্রোগ্রামটি নিম্নোক্ত মানদণ্ডের ভিত্তিতে স্কোর করা হবে:
এটি ক্ষেত্রে সর্বাধিক সংখ্যক বোতলগুলি সনাক্ত করতে পারে
N = 20
।মামলার বোতল সংখ্যা
N = 21
এবং তারপরে ক্রমান্বয়ে উচ্চতর কেস।কোড দৈর্ঘ্য। (সংক্ষিপ্ত কোড জিতেছে))