Matt Owen

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

return to portfolio
  1.  #!/usr/bin/perl
  2.  
  3.  use strict;
  4.  use warnings;
  5.  
  6.  
  7.  # base 2
  8.  sub base_2 {
  9.   my $n = shift;
  10.   my $str = '';
  11.  
  12.   while ($n) {
  13.   $str = $n%2 . $str;
  14.   $n = int $n/2;
  15.   }
  16.   return $str;
  17.  }
  18.  
  19.  
  20.  # is_palindrome
  21.  sub is_palindrome {
  22.   my $n = shift;
  23.   return join('', reverse(split //, $n)) eq $n ? 1 : 0;
  24.  }
  25.  
  26.  
  27.  # init
  28.  my $sum = 0;
  29.  
  30.  
  31.  # work
  32.  for (1..10**6) {
  33.   $sum += $_ if is_palindrome($_) && is_palindrome(base_2 $_);
  34.  }
  35.  
  36.  
  37.  # print
  38.  print $sum;