Average loop length: Difference between revisions

Added Perl example
m (→‎{{header|REXX}}: changed whitespace.)
(Added Perl example)
Line 1,398:
19 5.1530 5.1522 0.015970
20 5.2970 5.2936 0.065143</pre>
 
=={{header|Perl}}==
<lang perl>use List::Util qw(sum reduce);
 
sub find_loop {
my($n) = @_;
my($r,@seen);
while () { $seen[$r] = $seen[($r = int(1+rand $n))] ? return sum @seen : 1 }
}
 
say " N empiric theoric (error)";
say "=== ========= ============ =========";
 
my $MAX = 20;
my $TRIALS = 1000;
 
for my $n (1 .. $MAX) {
my $empiric = ( sum map { find_loop($n) } 1..$TRIALS ) / $TRIALS;
my $theoric = sum map { (reduce { $a*$b } $_**2, ($n-$_+1)..$n ) / $n ** ($_+1) } 1..$n;
 
printf "%3d %9.4f %12.4f (%5.2f%%)\n",
$n, $empiric, $theoric, 100 * ($empiric - $theoric) / $theoric;
}</lang>
{{out}}
<pre> N empiric theoric (error)
=== ========= ============ =========
1 1.0000 1.0000 ( 0.00%)
2 1.4950 1.5000 (-0.33%)
3 1.9190 1.8889 ( 1.59%)
4 2.2400 2.2188 ( 0.96%)
5 2.5120 2.5104 ( 0.06%)
6 2.7500 2.7747 (-0.89%)
7 3.0360 3.0181 ( 0.59%)
8 3.2600 3.2450 ( 0.46%)
9 3.4440 3.4583 (-0.41%)
10 3.6670 3.6602 ( 0.19%)
11 3.8340 3.8524 (-0.48%)
12 4.0450 4.0361 ( 0.22%)
13 4.2160 4.2123 ( 0.09%)
14 4.4420 4.3820 ( 1.37%)
15 4.5600 4.5458 ( 0.31%)
16 4.7940 4.7043 ( 1.91%)
17 4.7830 4.8579 (-1.54%)
18 4.9140 5.0071 (-1.86%)
19 5.2490 5.1522 ( 1.88%)
20 5.2930 5.2936 (-0.01%)</pre>
 
=={{header|Perl 6}}==
2,392

edits