EKG sequence convergence: Difference between revisions

Content added Content deleted
(Added Perl example)
(→‎{{header|Perl}}: added convergence test)
Line 275: Line 275:
=={{header|Perl}}==
=={{header|Perl}}==
{{trans|Perl 6}}
{{trans|Perl 6}}
<lang perl>use List::Util qw(none);
<lang perl>use List::Util qw(none sum);


sub gcd { my ($u,$v) = @_; $v ? gcd($v, $u%$v) : abs($u) }
sub gcd { my ($u,$v) = @_; $v ? gcd($v, $u%$v) : abs($u) }
Line 292: Line 292:
}
}


sub converge_at {
print "EKG($_): " . join(' ', EKG($_,10)) . "\n" for 2, 5, 7, 9, 10;</lang>
my($n1,$n2) = @_;
my $max = 100;
my @ekg1 = EKG($n1,$max);
my @ekg2 = EKG($n2,$max);
do { return $_+1 if $ekg1[$_] == $ekg2[$_] && sum(@ekg1[0..$_]) == sum(@ekg2[0..$_])} for 2..$max;
return "(no convergence in $max terms)";
}

print "EKG($_): " . join(' ', EKG($_,10)) . "\n" for 2, 5, 7, 9, 10;
print "EKGs of 5 & 7 converge at term " . converge_at(5, 7) . "\n"</lang>
{{out}}
{{out}}
<pre>EKG(2): 1 2 4 6 3 9 12 8 10 5
<pre>EKG(2): 1 2 4 6 3 9 12 8 10 5
Line 298: Line 308:
EKG(7): 1 7 14 2 4 6 3 9 12 8
EKG(7): 1 7 14 2 4 6 3 9 12 8
EKG(9): 1 9 3 6 2 4 8 10 5 15
EKG(9): 1 9 3 6 2 4 8 10 5 15
EKG(10): 1 10 2 4 6 3 9 12 8 14</pre>
EKG(10): 1 10 2 4 6 3 9 12 8 14
EKGs of 5 & 7 converge at term 21</pre>


=={{header|Perl 6}}==
=={{header|Perl 6}}==