কলেজ শেষ করে আপনি বন্ধু ও পরিবারের সাথে উদযাপনের জন্য একটি বিশাল পার্টি দিচ্ছেন। ৭০ জনেরও বেশি মানুষ এসেছেন, যাদের মধ্যে আপনার কিছুটা খামখেয়ালি Uncle Ted-ও আছেন।
তার চেনা দুষ্টুমির একটি হিসেবে তিনি আপনার সাথে £১০০ বাজি ধরলেন যে এই ঘরে অন্তত দুজনের জন্মদিন একই। শুনতে হাস্যকর লাগে: সম্ভাব্য জন্মদিন তো অতিথির সংখ্যার চেয়ে অনেক বেশি, তাই আপনি আত্মবিশ্বাসের সাথে রাজি হয়ে যান।
আপনি অবাক হয়ে দেখলেন, মাত্র ৩২ জন অতিথির জন্মদিন সংগ্রহের পরেই এমন দুজন অতিথি পাওয়া গেল যাদের জন্মদিন একই। হার মেনে নিয়ে আপনি Uncle Ted-কে তার £১০০ বুঝিয়ে দিলেন, কিন্তু কোথায় যেন একটা খটকা লাগে।
পরের দিন কৌতূহল আপনাকে বশ করে ফেলল। দ্রুত একটি ওয়েব সার্চ করেই আপনি পৌঁছে গেলেন জন্মদিনের প্যারাডক্সে, যেখানে দেখা যায় মাত্র ২৩ জন মানুষ থাকলেই একই জন্মদিন হওয়ার সম্ভাবনা ৫০% ছাড়িয়ে যায়।
আহা। তাই তো Uncle Ted এত আত্মবিশ্বাসী ছিলেন।
এবার পাল্টা চাল দিতে দৃঢ়প্রতিজ্ঞ হয়ে আপনি অন্য প্যারাডক্সগুলো খুঁজতে শুরু করলেন; পরের বার বাজি ধরবেন আপনি।
জন্মদিনের প্যারাডক্স একটি ভারিডিক্যাল প্যারাডক্স: মনে ভুল লাগলেও, বাস্তবে এটি সত্য।
আপনার কাজ হলো জন্মদিন প্যারাডক্সের সম্ভাবনাগুলো অনুমান করা।
এজন্য আপনাকে যা করতে হবে:
একটি জন্মতারিখে জন্মের পূর্ণ তারিখ (বছর, মাস ও দিন) থাকে, অন্যদিকে জন্মদিন বলতে কেবল মাস ও দিন বোঝায়, যা প্রতি বছর ফিরে আসে। একই মাস ও দিনের দুটি জন্মতারিখ একই জন্মদিন বোঝায়।
জন্মদিন প্যারাডক্স ধরে নেয় যে:
আপনার ইমপ্লিমেন্টেশনকে এই অনুমানগুলো মেনে চলতে হবে।
ফাংশন random_birthdates() নিম্নলিখিত বৈশিষ্ট্যসহ তারিখ তৈরি করা উচিত:
y অধিবর্ষ নয় এবং এমন যেন 1600 <= y < 2129 হয়।বছর ও জন্মদিনের বিতরণ দুটোই একটি চি-স্কয়ার্ড টেস্ট দিয়ে যাচাই করা হয়, p < ০.০০০১ স্তরে।
এর মানে হলো, যদি নির্দেশনা অনুযায়ী তারিখগুলো তৈরি করা হয়, তাহলে টেস্টে ব্যর্থ হয় এমন একটি মানের বিতরণ তৈরি হওয়ার সম্ভাবনা ০.০১%-এরও কম।
Exercism-এ সাইন আপ করুন, x86-64 Assembly ট্র্যাকের 22টি কনসেপ্ট130টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।