path_sum_two_ways.sf 599 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/ruby
  2. # See: https://projecteuler.net/problem=81
  3. var matrix = [
  4. [131, 673, 234, 103, 18],
  5. [201, 96, 342, 965, 150],
  6. [630, 803, 746, 422, 111],
  7. [537, 699, 497, 121, 956],
  8. [805, 732, 524, 37, 331],
  9. ]
  10. var end = matrix.end
  11. func path(i, j) is cached {
  12. var sum = matrix[i][j]
  13. if ((i < end) && (j < end)) {
  14. sum += Math.min(path(i+1, j), path(i, j+1))
  15. }
  16. elsif (i < end) {
  17. sum += path(i+1, j)
  18. }
  19. elsif (j < end) {
  20. sum += path(i, j+1)
  21. }
  22. sum
  23. }
  24. var sum = path(0, 0)
  25. assert_eq(sum, 2427)
  26. say "Minimum path-sum: #{sum}"