challenges

my solutions to various "programming challenge" problems
git clone https://wehaveforgeathome.hates.computer/challenges.git
Log | Files | Refs | LICENSE

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 }