Birthday problem: Difference between revisions

m (added whitespace.)
Line 787:
1182 496957 503043 50.304% <-
1183 494414 505586 50.559% <-</pre>
 
=={{header|Perl 6}}==
{{incomplete}}
 
For a start, we can show off how to get the exact solution. If we pick n people, the total number <tt>W</tt> of possible arrangements of birthdays is <tt>W = 365<sup>n</sup></tt>. Among those possibilities, there are <tt>C<sup>n</sup><sub>365</sub></tt> where all birthdays are different. For each of these, there are <tt>n!</tt> possible ways to arrange the n people. So the solution is <tt>1 - n!C<sup>n</sup><sub>365</sub>/365<sup>n</sup></tt>, which in Perl 6 can be written:
 
<lang perl6>say "$_ :", 1 - combinations(365, $_)/365**$_ * [*] 1..$_ for ^Inf</lang>
{{out}}
<pre>0 : 0
1 : 0
2 : 0.002740
3 : 0.0082042
4 : 0.016355912
5 : 0.027135573700
6 : 0.04046248364911
7 : 0.0562357030959754
8 : 0.0743352923516690285
9 : 0.0946238338891667
^C</pre>
 
Now comparing with a simulation :
 
<lang perl6>sub theory($n) { 1 - combinations(365, $n)/365**$n* [*] 1..$n }
sub simulation(:number-of-people($n), :sample-size($N) = 1_000) {
$N R/ grep ?*, ((^365).roll($n).unique !== $n) xx $N;
}
 
for 2 .. Inf -> $n {
printf "%3d people, theory: %.4f, simulation: %.4f\n",
$n, theory($n), simulation(number-of-people => $n);
}</lang>
{{out}}
<pre> 2 people, theory: 0.0027, simulation: 0.0020
3 people, theory: 0.0082, simulation: 0.0080
4 people, theory: 0.0164, simulation: 0.0130
5 people, theory: 0.0271, simulation: 0.0260
6 people, theory: 0.0405, simulation: 0.0340
7 people, theory: 0.0562, simulation: 0.0590
8 people, theory: 0.0743, simulation: 0.0730
9 people, theory: 0.0946, simulation: 0.1080
10 people, theory: 0.1169, simulation: 0.1120
11 people, theory: 0.1411, simulation: 0.1220
12 people, theory: 0.1670, simulation: 0.1740
13 people, theory: 0.1944, simulation: 0.2200
14 people, theory: 0.2231, simulation: 0.2290
15 people, theory: 0.2529, simulation: 0.2540
16 people, theory: 0.2836, simulation: 0.2820
17 people, theory: 0.3150, simulation: 0.3190
18 people, theory: 0.3469, simulation: 0.3740
19 people, theory: 0.3791, simulation: 0.3720
20 people, theory: 0.4114, simulation: 0.3810
21 people, theory: 0.4437, simulation: 0.4340
22 people, theory: 0.4757, simulation: 0.4700
23 people, theory: 0.5073, simulation: 0.4960
24 people, theory: 0.5383, simulation: 0.5200
25 people, theory: 0.5687, simulation: 0.5990
26 people, theory: 0.5982, simulation: 0.5980
27 people, theory: 0.6269, simulation: 0.6520
28 people, theory: 0.6545, simulation: 0.6430
29 people, theory: 0.6810, simulation: 0.6690
30 people, theory: 0.7063, simulation: 0.7190
31 people, theory: 0.7305, simulation: 0.7450
^C</pre>
 
=={{header|Python}}==
1,934

edits