018 Maximum path sum I.pl 942 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: https://github.com/trizen
  5. # Find the maximum total from top to bottom of the triangle below.
  6. # https://projecteuler.net/problem=18
  7. # Runtime: 0.029s
  8. use 5.010;
  9. use List::Util qw(max);
  10. use Memoize qw(memoize);
  11. memoize('path');
  12. my @triangle;
  13. while (<DATA>) {
  14. push @triangle, [split(' ')];
  15. }
  16. my $end = $#triangle;
  17. sub path {
  18. my ($i, $j) = @_;
  19. if ($i == $end) { return $triangle[$i][$j] }
  20. $triangle[$i][$j] + max(path($i + 1, $j), path($i + 1, $j + 1));
  21. }
  22. say path(0, 0);
  23. __DATA__
  24. 75
  25. 95 64
  26. 17 47 82
  27. 18 35 87 10
  28. 20 04 82 47 65
  29. 19 01 23 75 03 34
  30. 88 02 77 73 07 63 67
  31. 99 65 04 28 06 16 70 92
  32. 41 41 26 56 83 40 80 70 33
  33. 41 48 72 33 47 32 37 16 94 29
  34. 53 71 44 65 25 43 91 52 97 51 14
  35. 70 11 33 28 77 73 17 78 39 68 17 57
  36. 91 71 52 38 17 14 91 43 58 50 27 29 48
  37. 63 66 04 68 89 53 67 30 73 16 69 87 40 31
  38. 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23