source code for "files/pe/pe_034.pl"
return to portfolio
- #!/usr/bin/perl
- use strict;
- use warnings;
- # factorial
- sub factorial {
- my $n = shift;
- my $m = 1;
- # $factorials = (0,1,1,1,2,2,3,6,4,24,5,120,6,720); can speed it up with a cache
- $m *= $n-- while $n > 1;
- return $m;
- }
- # sum
- sub weird_digit_sum {
- my $sum = 0;
- $sum += factorial($_) for split //, shift;
- return $sum;
- }
- my $sum = 0;
- my %factorials;
- #$factorials = (0=>1, 1=>1, 2=>2);
- #$factorials{$_} = $factorials{$_-1} * $_ for (3..9);
- for (10..7*factorial(9)) {
- $sum += $_ if weird_digit_sum($_) == $_;
- }
- #
- print $sum;