المسارات
/
C#
C#
/
التمارين
/
أعياد ميلاد محيّرة
أعياد ميلاد محيّرة

أعياد ميلاد محيّرة

متوسط

مقدمة

بعد تخرّجك مباشرة من الجامعة، تُقيم حفلة ضخمة للاحتفال مع الأصدقاء والعائلة. وقد حضر أكثر من 70 شخصًا، بمن فيهم عمّك Ted غريب الأطوار قليلًا.

في إحدى مقالبه المعتادة، يراهنك على £100 أنه يوجد شخصان على الأقل في القاعة يشتركان في نفس تاريخ الميلاد. يبدو ذلك سخيفًا، فتواريخ الميلاد المحتملة أكثر بكثير من عدد الضيوف، لذا تقبل الرهان بثقة.

ولدهشتك، بعد جمع تواريخ ميلاد 32 ضيفًا فقط، وجدت بالفعل ضيفين يشتركان في نفس تاريخ الميلاد. وبعد أن تقبّلت خسارتك، تسلّم عمّك Ted مبلغ £100، لكن شيئًا ما يبدو غير طبيعي.

في اليوم التالي، يغلبك الفضول. يقودك بحث سريع على الويب إلى مفارقة عيد الميلاد، التي تكشف أنه مع 23 شخصًا فقط، يتجاوز احتمال تشابه تاريخ الميلاد 50%.

آه. إذن هذا هو سبب ثقة عمّك Ted الشديدة.

وبعزيمة على قلب الطاولة، تبدأ في البحث عن مفارقات أخرى؛ في المرة القادمة، ستكون أنت من يعقد الرهانات.

Note

مفارقة عيد الميلاد هي مفارقة صادقة: فرغم أنها تبدو خاطئة، إلا أنها صحيحة في الواقع.

التعليمات

مهمتك أن تقدّر احتمالات مفارقة عيد الميلاد.

للقيام بذلك، عليك أن:

  • تولّد تواريخ ميلاد عشوائية.
  • تتحقق مما إذا كانت مجموعة من تواريخ الميلاد المولّدة عشوائيًا تحتوي على تاريخي ميلاد على الأقل يشتركان في عيد الميلاد نفسه.
  • تقدّر احتمال أن يشترك شخصان على الأقل في مجموعة في عيد الميلاد نفسه، وذلك لأحجام مجموعات مختلفة.
Note

يشمل تاريخ الميلاد تاريخ الولادة كاملًا (السنة والشهر واليوم)، بينما يشير عيد الميلاد إلى الشهر واليوم فقط، وهما يتكرران كل عام. تاريخا ميلاد لهما الشهر واليوم نفسهما يقابلان عيد الميلاد نفسه.

Caution

تفترض مفارقة عيد الميلاد ما يلي:

  • أن يكون عدد أعياد الميلاد الممكنة 365 (بلا سنوات كبيسة).
  • أن يكون احتمال كل عيد ميلاد متساويًا (توزيع منتظم).

يجب أن يتّبع تنفيذك هذه الافتراضات.


المصدر

Erik Schierboomيفتح الرابط في نافذة أو علامة تبويب جديدة
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء أعياد ميلاد محيّرة؟

سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.