學習軌道
/
x86-64 Assembly
x86-64 Assembly
/
練習
/
令人費解的生日
令人費解的生日

令人費解的生日

中等

簡介

大學剛畢業,你辦了一場盛大的派對,和朋友、家人一起慶祝。來了超過 70 個人,其中包括有點古怪的泰德叔叔。

他又照慣例搞怪,跟你打賭 100 英鎊,說在場至少會有兩個人的生日是同一天。這聽起來太荒謬了:可能的生日遠比賓客的人數多,於是你自信滿滿地答應了。

令你大吃一驚的是,才問了 32 位賓客的生日,你就已經找到兩個生日相同的賓客。你認賠,把 100 英鎊交給泰德叔叔,但總覺得哪裡怪怪的。

隔天,好奇心還是戰勝了你。上網快速一查,你找到了生日悖論,這才發現只要 23 個人,有兩個人同一天生日的機率就超過 50%。

啊。原來_這_就是泰德叔叔這麼有把握的原因。

你下定決心要扳回一城,開始研究其他悖論;下一次,就換_你_來當那個跟別人打賭的人了。

Note

生日悖論是一種真實悖論:即使感覺不對,實際上卻是真的。

說明

你的任務是估計生日悖論的機率。

為此,你需要:

  • 產生隨機的出生日期。
  • 檢查一組隨機產生的出生日期中,是否至少有兩個擁有相同的生日。
  • 針對不同的人數,估計一個群體中至少有兩人生日相同的機率。
Note

出生日期包含完整的出生年月日(年、月、日),而生日只指月和日,它們每年都會重複。 兩個出生日期若有相同的月和日,就對應到相同的生日。

Caution

生日悖論假設:

  • 有 365 個可能的生日(不計閏年)。
  • 每個生日的可能性相同(均勻分布)。

你的實作必須遵循這些假設。

x86-64 組合語言專屬說明

函式random_birthdates()產生的日期應該符合以下性質:

  1. 年份必須有效。 有效的年份y是非閏年,而且符合1600 <= y < 2129。
  2. 年份在整個有效值範圍內均勻分布。
  3. 生日在一年 365 天當中均勻分布,也就是每個日曆日出現的機率都相同。 要注意的是,這代表月份_並非_等機率:31 天的月份比 30 天的月份更有可能,而兩者又都比二月更有可能。

年份與生日兩者的分布都會以卡方檢定檢查,顯著水準為 p < 0.0001。

這代表如果日期是依照指示產生,那麼產生出來的數值分布未能通過檢定的機率不到 0.01%。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
x86-64 Assembly Exercism

準備好開始 令人費解的生日 了嗎?

註冊 Exercism,透過 22 個概念130 個練習 和真人引導來學習並精通 x86-64 Assembly,全部免費。