พื้นหลัง
ขัดแย้งวันเกิดเป็นปัญหาที่เป็นที่นิยมในทฤษฎีความน่าจะได้อย่างหวุดหวิดซึ่งสัญชาตญาณทางคณิตศาสตร์ (คนส่วนใหญ่) คำแถลงปัญหาคือ:
เมื่อพิจารณาจากคนNคนความน่าจะเป็นที่อย่างน้อยสองคนมีวันคล้ายวันเกิด (ไม่คำนึงถึงปี)
ปัญหานี้มักจะทำให้ง่ายขึ้นโดยไม่สนใจวันก้าวกระโดดอย่างสิ้นเชิง ในกรณีนี้คำตอบสำหรับN = 23คือP (23) ≈ 0.5072972 (เป็นตัวอย่างทั่วไป) บทความ Wikipedia ที่เชื่อมโยงอธิบายถึงวิธีที่จะเกิดความน่าจะเป็นนี้ อีกวิธีหนึ่งวิดีโอ Numberphile นี้ทำได้ดีมาก
อย่างไรก็ตามสำหรับความท้าทายนี้เราต้องการทำถูกต้องและอย่าเพิกเฉยปีที่ผ่านมา มันซับซ้อนกว่านี้เล็กน้อยเนื่องจากตอนนี้วันที่ 29 กุมภาพันธ์จะต้องมีการเพิ่ม แต่วันเกิดโดยเฉพาะอย่างยิ่งนี้มีโอกาสน้อยกว่าคนอื่น ๆ ทั้งหมด
นอกจากนี้เราจะใช้กฎปีอธิกสุรทินแบบเต็ม:
- ถ้าปีหารด้วย 400 มันจะเป็นปีอธิกสุรทิน
- มิฉะนั้นถ้าปีหารด้วย 100 จะไม่ใช่ปีอธิกสุรทิน
- มิฉะนั้นถ้าปีหารด้วย 4 จะเป็นปีอธิกสุรทิน
- อย่างอื่นมันไม่ใช่ปีอธิกสุรทิน
สับสน? หมายความว่าปี 1700, 1800, 1900, 2100, 2200, 2300 ไม่ใช่ปีอธิกสุรทิน แต่ 1600, 2000, 2400 เป็น (เช่นเดียวกับปีอื่น ๆ หารด้วย 4) ปฏิทินนี้ทำซ้ำทุก 400 ปีและเราจะถือว่าการกระจายวันเกิดในช่วง 400 ปีที่ผ่านมาเป็นแบบเดียวกัน
ผลการแก้ไขสำหรับN = 23คือตอนนี้P (23) ≈ 0.5068761
ความท้าทาย
ให้เป็นจำนวนเต็ม1 ≤ N < 100
กำหนดความน่าจะเป็นที่N
คนอย่างน้อยสองคนมีวันคล้ายวันเกิดภายใต้การพิจารณาของกฎปีอธิกสุรทิน ผลลัพธ์ควรเป็นเลขทศนิยมหรือจุดคงที่ซึ่งมีความแม่นยำถึงทศนิยมอย่างน้อย 6 ตำแหน่ง เป็นที่ยอมรับได้ที่จะตัดทอนศูนย์ต่อท้าย
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ฟังก์ชันและส่งออกผลลัพธ์ผ่านทาง STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือฟังก์ชัน
โซลูชันของคุณจะต้องสามารถสร้างเอาต์พุตสำหรับอินพุตทั้งหมด 99 รายการในเวลาไม่กี่วินาที นี่คือหลักในการแยกแยะวิธีการมอนติคาร์โลกับตัวอย่างจำนวนมากดังนั้นหากคุณใช้อัลกอริทึมที่รวดเร็วและแม่นยำในภาษาลึกลับที่ช้าเกินไปฉันยินดีที่จะให้กฎนี้แก่คุณ
กรณีทดสอบ
นี่คือตารางผลลัพธ์เต็มรูปแบบ:
1 => 0.000000
2 => 0.002737
3 => 0.008195
4 => 0.016337
5 => 0.027104
6 => 0.040416
7 => 0.056171
8 => 0.074251
9 => 0.094518
10 => 0.116818
11 => 0.140987
12 => 0.166844
13 => 0.194203
14 => 0.222869
15 => 0.252642
16 => 0.283319
17 => 0.314698
18 => 0.346578
19 => 0.378764
20 => 0.411063
21 => 0.443296
22 => 0.475287
23 => 0.506876
24 => 0.537913
25 => 0.568260
26 => 0.597796
27 => 0.626412
28 => 0.654014
29 => 0.680524
30 => 0.705877
31 => 0.730022
32 => 0.752924
33 => 0.774560
34 => 0.794917
35 => 0.813998
36 => 0.831812
37 => 0.848381
38 => 0.863732
39 => 0.877901
40 => 0.890932
41 => 0.902870
42 => 0.913767
43 => 0.923678
44 => 0.932658
45 => 0.940766
46 => 0.948060
47 => 0.954598
48 => 0.960437
49 => 0.965634
50 => 0.970242
51 => 0.974313
52 => 0.977898
53 => 0.981043
54 => 0.983792
55 => 0.986187
56 => 0.988266
57 => 0.990064
58 => 0.991614
59 => 0.992945
60 => 0.994084
61 => 0.995055
62 => 0.995880
63 => 0.996579
64 => 0.997169
65 => 0.997665
66 => 0.998080
67 => 0.998427
68 => 0.998715
69 => 0.998954
70 => 0.999152
71 => 0.999314
72 => 0.999447
73 => 0.999556
74 => 0.999645
75 => 0.999717
76 => 0.999775
77 => 0.999822
78 => 0.999859
79 => 0.999889
80 => 0.999913
81 => 0.999932
82 => 0.999947
83 => 0.999959
84 => 0.999968
85 => 0.999976
86 => 0.999981
87 => 0.999986
88 => 0.999989
89 => 0.999992
90 => 0.999994
91 => 0.999995
92 => 0.999996
93 => 0.999997
94 => 0.999998
95 => 0.999999
96 => 0.999999
97 => 0.999999
98 => 0.999999
99 => 1.000000
(แน่นอนP (99)เพียง1.0เนื่องจากการปัดเศษความน่าจะเป็นจะไม่ถึง1.0จนกระทั่งP (367) )