Matt Owen

source code for "files/pe/pe_004.pl"

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  use POSIX qw/ceil floor/;
  6.  
  7.  sub is_palindrome
  8.  {
  9.   my ($s, $left, $right) = (shift, '', '');
  10.   $left = substr($s, 0, floor length($s)/2);
  11.   $right= reverse substr($s, ceil length($s)/2);
  12.   return $left eq $right;
  13.  }
  14.  
  15.  sub factor
  16.  {
  17.   my ($n, $k, @factors) = (shift, 0, ());
  18.   my ($div, $root) = (0, 0);
  19.  
  20.   $root = int sqrt $n;
  21.  
  22.   for ($k = 100; $k < $root; $k++) {
  23.   if ($n % $k == 0 && length($n/$k) == 3) {
  24.   push(@factors, $k);
  25.   print "$k ... ", $n/$k, "\n";
  26.   }
  27.   }
  28.  
  29.   return @factors;
  30.  }
  31.  
  32.  my ($i, $j, $k, $palindrome);
  33.  my @factors = ();
  34.  
  35.  foreach $i (100..999) {
  36.   foreach $j ($i..999) {
  37.  
  38.  
  39.   }
  40.  }
  41.  
  42.  foreach $i (1..9) {
  43.   foreach $j (0..9) {
  44.   foreach $k (0..9) {
  45.   $palindrome = (10**5+1)*$i + (10**4+10)*$j + 1100*$k;
  46.   @factors = factor($palindrome);
  47.   @factors = grep { length $_ == 3 } @factors;
  48.   last if (length @factors > 1);
  49.  
  50.   }
  51.   }
  52.  }