EKG sequence convergence: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) (Added Perl example) |
SqrtNegInf (talk | contribs) (→{{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 { |
|||
⚫ | |||
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 "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 |
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}}== |