030 Digit fifth powers.pl 834 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 27 January 2017
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=30
  7. # Runtime: 1.763
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(forperm vecsum);
  12. use Algorithm::Combinatorics qw(combinations_with_repetition);
  13. my $pow = 5;
  14. my $sum = 0;
  15. foreach my $k (2 .. $pow + 1) {
  16. my %seen;
  17. my $iter = combinations_with_repetition([0 .. 9], $k);
  18. while (my $p = $iter->next) {
  19. my @digits = @$p;
  20. my $sum = vecsum(map { $_**$pow } @digits);
  21. local $" = '';
  22. forperm {
  23. if ($digits[$_[0]] != 0 and $sum == "@digits[@_]") {
  24. $seen{"@digits[@_]"} = 1;
  25. }
  26. } $k;
  27. }
  28. say "$k -> (", join(', ', keys %seen), ')';
  29. $sum += vecsum(keys %seen);
  30. }
  31. say "\nSum: $sum";