#!/usr/bin/perl
use v5.12;
use strict;
use warnings;
my @max = qw/0 0/;
my %results = {
1 => 0,
2 => 1,
};
sub chainLength {
my $arg = shift;
my $num = $arg;
my $count = 0;
while ( $num > 2 ) {
if ( exists $results{$num} ) {
return ( $results{$arg} = $count + int( $results{$num} ) );
}
( ( $num % 2 ) == 0 ) ? ( $num /= 2 ) : ( $num = 3 * $num + 1 );
$count++;
}
return ( $results{$arg} = $count );
}
for my $i ( 2 .. 1000000 ) {
my $res = chainLength($i);
if ( $res > $max[1] ) {
$max[0] = $i;
$max[1] = $res;
}
}
print "@max";