38 lines
671 B
Perl
38 lines
671 B
Perl
#!/usr/bin/perl
|
|
|
|
use warnings;
|
|
use strict;
|
|
|
|
my @h = hailstone(27);
|
|
print "Length of hailstone(27) = " . scalar @h . "\n";
|
|
print "[" . join(", ", @h[0 .. 3], "...", @h[-4 .. -1]) . "]\n";
|
|
|
|
my ($max, $n) = (0, 0);
|
|
for my $x (1 .. 99_999) {
|
|
@h = hailstone($x);
|
|
if (scalar @h > $max) {
|
|
($max, $n) = (scalar @h, $x);
|
|
}
|
|
}
|
|
|
|
print "Max length $max was found for hailstone($n) for numbers < 100_000\n";
|
|
|
|
|
|
sub hailstone {
|
|
my ($n) = @_;
|
|
|
|
my @sequence = ($n);
|
|
|
|
while ($n > 1) {
|
|
if ($n % 2 == 0) {
|
|
$n = int($n / 2);
|
|
} else {
|
|
$n = $n * 3 + 1;
|
|
}
|
|
|
|
push @sequence, $n;
|
|
}
|
|
|
|
return @sequence;
|
|
}
|