038.pl (665B)
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 use List::Util qw(reduce); 6 7 my $limit = 9999; 8 my $biggest = 0; 9 10 for (my $i = 1; $i <= $limit; $i++) { 11 my $j = 2; 12 my $p = 0; 13 while (length $p <= 9) { 14 $p = concatenated_product($i, $j); 15 if (length $p == 9 && is_pandigital($p) && $p > $biggest) { 16 $biggest = $p; 17 } 18 $j++; 19 } 20 } 21 22 print "$biggest\n"; 23 24 sub concatenated_product { 25 my ($n, $k) = @_; 26 return int reduce { $a . $b } map { $n * $_ } (1 .. $k); 27 } 28 29 sub is_pandigital { 30 my $n = shift; 31 my @digits = sort(map(int, split('', $n))); 32 for (my $i = 1; $i <= scalar @digits; $i++) { 33 return 0 if ($digits[$i - 1] != $i); 34 } 35 return 1; 36 }