জেব্রা পাজল একটি বিখ্যাত লজিক পাজল, যেখানে পাঁচটি বাড়ি থাকে এবং প্রতিটি বাড়ি আলাদা রঙে আঁকা। বাড়িগুলোর বাসিন্দারাও আলাদা: তাঁদের জাতীয়তা আলাদা, পোষা প্রাণী আলাদা, পানীয় আলাদা এবং শখও আলাদা।
পাজলটি সমাধান করতে আপনাকে সাহায্য করার জন্য ১৫টি বিবৃতি দেওয়া হয়েছে, যেগুলো সমাধানটি বর্ণনা করে। তবে কেবল সবগুলো বিবৃতির তথ্য একসাথে মিলিয়েই আপনি পাজলটির সমাধান খুঁজে পাবেন।
জেব্রা পাজল হলো একটি কনস্ট্রেইন্ট স্যাটিসফ্যাকশন প্রবলেম (CSP)। এমন সমস্যায় আপনার কাছে সম্ভাব্য মানের একটি সেট থাকে, আর থাকে কিছু শর্ত, যা নির্ধারণ করে দেয় কোন মানগুলো বৈধ। আরেকটি সুপরিচিত CSP হলো সুডোকু।
আপনার কাজ হলো জেব্রা পাজল সমাধান করে এই দুটি প্রশ্নের উত্তর বের করা:
নিচের ১৫টি বিবৃতি সবই সত্য বলে জানা আছে:
এছাড়াও, পাঁচটি বাড়ির প্রত্যেকটি আলাদা রঙে আঁকা, আর তাদের বাসিন্দারা ভিন্ন ভিন্ন দেশের, ভিন্ন ভিন্ন পোষা প্রাণী পোষে, ভিন্ন ভিন্ন পানীয় পান করে এবং ভিন্ন ভিন্ন শখে নিয়োজিত থাকে।
এখানে ২৪ বিলিয়ন (৫!⁵ = ২৪,৮৮৩,২০০,০০০) সম্ভাব্য সমাধান আছে, তাই যতটা সম্ভব সমাধান বাদ দেওয়ার চেষ্টা করুন।
ZebraPuzzle ক্লাসের waterDrinker ও zebraOwner মেথড দুটি ইমপ্লিমেন্ট করুন।
প্রত্যেকটিকে একটি করে স্ট্রিং রিটার্ন করতে হবে, যার মান হবে জেব্রা-পাজলের "কে পানি পান করে?" ও "জেব্রার মালিক কে?" প্রশ্ন দুটির উত্তর।
প্রতিটি উত্তর হবে বাসিন্দাদের কোনো একটি জাতীয়তা: Englishman, Spaniard, Ukrainian, Norwegian বা Japanese.
স্পষ্টতই, আপনি যদি টেস্ট প্রোগ্রামে উঁকি দিয়ে প্রত্যাশিত সমাধানটি দেখে নেন, তাহলে সহজেই দুটি একক-স্টেটমেন্ট ফাংশন লিখে ফেলতে পারেন। কিন্তু লক্ষ্য হলো এমন একটি অ্যালগরিদম তৈরি করা, যা পাজলের দেওয়া তথ্য ও শর্তাবলি কাজে লাগিয়ে সঠিক দুটি উত্তর নির্ণয় করে।
Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
২৪ বিলিয়ন সম্ভাব্য সমাধান থেকে জেব্রা পাজলের সমাধান খুঁজে বের করার ৮টি ভিন্ন উপায় অন্বেষণ করুন, যার মধ্যে রয়েছে যত তাড়াতাড়ি সম্ভব অবৈধ পারমিউটেশন উপেক্ষা করা, AC-3 অ্যালগরিদম, একটি খুব সংক্ষিপ্ত লজিক-ভিত্তিক সমাধান এবং এমনকি একটি জেনেটিক অ্যালগরিদম!