var triangle = ARGF.slurp.lines.map{.words.map{.to_n}}   func max_value(i=0, j=0) is cached { i == triangle.len && return 0 triangle[i][j] + [max_value(i+1, j), max_value(i+1, j+1)].max }   say max_value()