Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  
  6.  
  7.  # enumerate possibilities
  8.  sub list_viable {
  9.   my $str = shift;
  10.   my @n = split //, $str;
  11.   my @possibilities;
  12.  
  13.   # we can do thismore elegantly...
  14.   for my $j (0..@n-1) {
  15.   for my $k ($j+1..@n-1) {
  16.   for my $i ($k+1..@n-1) {
  17.   if ($n[$j] eq $n[$k] && $n[$k] eq $n[$i]) {
  18.   push @possibilities, substr($str, 0, $j) . '*' . substr($str, $j+1, $k-$j-1) . '*' . substr($str, $k+1, $i-$k-1) . '*' . substr($str, $i+1);
  19.   }
  20.   }
  21.   }
  22.   }
  23.  
  24.   return @possibilities;
  25.  }
  26.  
  27.  
  28.  # file handle
  29.  open PRIMES, "primes_under_1000000.TXT" or die("CAN'T OPEN FILE.");
  30.  
  31.  
  32.  # init
  33.  my $count = 0;
  34.  my %primes = map {$_,1} map { chomp; int $_ } <PRIMES>;
  35.  
  36.  
  37.  # work
  38.  for my $p (sort { $a <=> $b } keys %primes) {
  39.   for my $v (list_viable $p) {
  40.   my @perhaps = ();
  41.  
  42.   for my $d (0..9) {
  43.   my $t = $v;
  44.  
  45.   # KLUDGE!!
  46.   $t =~ s/\*/$d/;
  47.   $t =~ s/\*/$d/;
  48.   $t =~ s/\*/$d/;
  49.  
  50.   # is a prime
  51.   push @perhaps, $t if defined $primes{$t};
  52.   }
  53.  
  54.   $count = int @perhaps;
  55.  
  56.  
  57.   # end condition
  58.   if ($count >= 8) {
  59.   print "$p";
  60.   goto LEAVE;
  61.   }
  62.   }
  63.  }
  64.  
  65.  
  66.  
  67.  
  68.  # end
  69.  LEAVE: close PRIMES;