#!/usr/bin/ruby # See: https://projecteuler.net/problem=81 var matrix = [ [131, 673, 234, 103, 18], [201, 96, 342, 965, 150], [630, 803, 746, 422, 111], [537, 699, 497, 121, 956], [805, 732, 524, 37, 331], ] var end = matrix.end func path(i, j) is cached { var sum = matrix[i][j] if ((i < end) && (j < end)) { sum += Math.min(path(i+1, j), path(i, j+1)) } elsif (i < end) { sum += path(i+1, j) } elsif (j < end) { sum += path(i, j+1) } sum } var sum = path(0, 0) assert_eq(sum, 2427) say "Minimum path-sum: #{sum}"