https://projecteuler.net/problem=81
ループがない有向グラフなので、DPを使えばよいです。
import sys #################### Matrix #################### fn read_matrix(path: String) -> List[List[Int]]: try: var matrix = List[List[Int]]() with open(path, "r") as f: var whole = f.read() var lines = whole.split('\n') for line in lines: if line[] == '': break var ns = List[Int]() var v = line[].split(',') for s in v: var n = atol(s[]) ns.append(n) matrix.append(ns) return matrix except: return List[List[Int]]() trait Printable(CollectionElement, Stringable): pass fn print_matrix[T: Printable](mat: List[List[T]]): var s = String('[\n') for v in mat: s += ' [' + str(v[][0]) for i in range(1, len(v[])): s += ', ' + str(v[][i]) s += ']\n' s += '\n]' print(s) fn initialize_matrix[T: CollectionElement](a: T, H: Int, W: Int) -> List[List[T]]: var matrix = List[List[T]]() for _ in range(H): var v = List[T]() for _ in range(W): v.append(a) matrix.append(v) return matrix #################### process #################### fn f(path: String) -> Int: var mat = read_matrix(path) var H = len(mat) var W = len(mat[0]) var dp = initialize_matrix(10**18, H+1, W+1) dp[0][1] = 0 dp[1][0] = 0 for i in range(1, H+1): for j in range(1, W+1): dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + mat[i-1][j-1] return dp[H][W] fn main() raises: var path = String("0081_matrix.txt") print(f(path))