074 Digit factorial chains.pl 634 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 16 August 2016
  4. # License: GPLv3
  5. # Website: https://github.com/trizen
  6. # https://projecteuler.net/problem=74
  7. # Runtime: 17.323s
  8. use 5.010;
  9. use strict;
  10. use List::Util qw(sum0);
  11. use ntheory qw(factorial todigits);
  12. my @factorial = (map { factorial($_) } 0 .. 9);
  13. sub f {
  14. my ($n) = @_;
  15. my %seen = ($n => 1);
  16. while (1) {
  17. my $m = sum0(@factorial[todigits($n)]);
  18. exists($seen{$m}) && last;
  19. undef $seen{$m};
  20. $n = $m;
  21. }
  22. keys(%seen) == 60;
  23. }
  24. my $count = 0;
  25. foreach my $i (0 .. 1e6 - 1) {
  26. ++$count if f($i);
  27. }
  28. say $count;