ট্র্যাক
/
x86-64 Assembly
x86-64 Assembly
/
অনুশীলনী
/
হতবুদ্ধিকর জন্মদিন
হতবুদ্ধিকর জন্মদিন

হতবুদ্ধিকর জন্মদিন

মধ্যম

ভূমিকা

কলেজ শেষ করে আপনি বন্ধু ও পরিবারের সাথে উদযাপনের জন্য একটি বিশাল পার্টি দিচ্ছেন। ৭০ জনেরও বেশি মানুষ এসেছেন, যাদের মধ্যে আপনার কিছুটা খামখেয়ালি Uncle Ted-ও আছেন।

তার চেনা দুষ্টুমির একটি হিসেবে তিনি আপনার সাথে £১০০ বাজি ধরলেন যে এই ঘরে অন্তত দুজনের জন্মদিন একই। শুনতে হাস্যকর লাগে: সম্ভাব্য জন্মদিন তো অতিথির সংখ্যার চেয়ে অনেক বেশি, তাই আপনি আত্মবিশ্বাসের সাথে রাজি হয়ে যান।

আপনি অবাক হয়ে দেখলেন, মাত্র ৩২ জন অতিথির জন্মদিন সংগ্রহের পরেই এমন দুজন অতিথি পাওয়া গেল যাদের জন্মদিন একই। হার মেনে নিয়ে আপনি Uncle Ted-কে তার £১০০ বুঝিয়ে দিলেন, কিন্তু কোথায় যেন একটা খটকা লাগে।

পরের দিন কৌতূহল আপনাকে বশ করে ফেলল। দ্রুত একটি ওয়েব সার্চ করেই আপনি পৌঁছে গেলেন জন্মদিনের প্যারাডক্সে, যেখানে দেখা যায় মাত্র ২৩ জন মানুষ থাকলেই একই জন্মদিন হওয়ার সম্ভাবনা ৫০% ছাড়িয়ে যায়।

আহা। তাই তো Uncle Ted এত আত্মবিশ্বাসী ছিলেন।

এবার পাল্টা চাল দিতে দৃঢ়প্রতিজ্ঞ হয়ে আপনি অন্য প্যারাডক্সগুলো খুঁজতে শুরু করলেন; পরের বার বাজি ধরবেন আপনি।

Note

জন্মদিনের প্যারাডক্স একটি ভারিডিক্যাল প্যারাডক্স: মনে ভুল লাগলেও, বাস্তবে এটি সত্য।

নির্দেশনা

আপনার কাজ হলো জন্মদিন প্যারাডক্সের সম্ভাবনাগুলো অনুমান করা।

এজন্য আপনাকে যা করতে হবে:

  • এলোমেলো জন্মতারিখ তৈরি করুন।
  • যাচাই করুন যে, এলোমেলোভাবে তৈরি করা জন্মতারিখের একটি সংগ্রহে অন্তত দুটির জন্মদিন একই কি না।
  • বিভিন্ন আকারের দলের জন্য, একটি দলে অন্তত দুজনের জন্মদিন একই হওয়ার সম্ভাবনা অনুমান করুন।
Note

একটি জন্মতারিখে জন্মের পূর্ণ তারিখ (বছর, মাস ও দিন) থাকে, অন্যদিকে জন্মদিন বলতে কেবল মাস ও দিন বোঝায়, যা প্রতি বছর ফিরে আসে। একই মাস ও দিনের দুটি জন্মতারিখ একই জন্মদিন বোঝায়।

Caution

জন্মদিন প্যারাডক্স ধরে নেয় যে:

  • সম্ভাব্য জন্মদিনের সংখ্যা ৩৬৫ (অধিবর্ষ নেই)।
  • প্রতিটি জন্মদিন সমান সম্ভাব্য (ইউনিফর্ম ডিস্ট্রিবিউশন)।

আপনার ইমপ্লিমেন্টেশনকে এই অনুমানগুলো মেনে চলতে হবে।

x86-64 Assembly-এর নির্দিষ্ট নোট

ফাংশন random_birthdates() নিম্নলিখিত বৈশিষ্ট্যসহ তারিখ তৈরি করা উচিত:

  1. বছরটি বৈধ হওয়া উচিত। একটি বৈধ বছর y অধিবর্ষ নয় এবং এমন যেন 1600 <= y < 2129 হয়।
  2. বছরটি বৈধ মানের পুরো পরিসরে সমানভাবে বিতরণ করা হয়েছে।
  3. জন্মদিনটি বছরের সব ৩৬৫ দিনে সমানভাবে বিতরণ করা হয়েছে, যাতে প্রতিটি ক্যালেন্ডার দিনের সম্ভাবনা সমান হয়। লক্ষ্য করুন, এর মানে হলো মাসগুলো সমানভাবে সম্ভাব্য নয়: ৩১ দিনের একটি মাস ৩০ দিনের মাসের চেয়ে বেশি সম্ভাব্য, আর দুটোই ফেব্রুয়ারির চেয়ে বেশি সম্ভাব্য।

বছর ও জন্মদিনের বিতরণ দুটোই একটি চি-স্কয়ার্ড টেস্ট দিয়ে যাচাই করা হয়, p < ০.০০০১ স্তরে।

এর মানে হলো, যদি নির্দেশনা অনুযায়ী তারিখগুলো তৈরি করা হয়, তাহলে টেস্টে ব্যর্থ হয় এমন একটি মানের বিতরণ তৈরি হওয়ার সম্ভাবনা ০.০১%-এরও কম।


সূত্র

Erik Schierboomলিংকটি নতুন উইন্ডো বা ট্যাবে খোলে
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
x86-64 Assembly Exercism

হতবুদ্ধিকর জন্মদিন শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, x86-64 Assembly ট্র্যাকের 22টি কনসেপ্ট130টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।