#!/usr/bin/python # In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by only moving to the right and down, # is indicated in bold red and is equal to 2427. # # *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* # # Find the minimal path sum, in matrix.txt, a 31K text file containing a 80 by 80 matrix, from the top left to the bottom right # by only moving right and down. import sys from projecteuler import timing def sum_paths(matrix, m, n): for i in range(m-2, -1, -1): matrix[m-1][i] = matrix[m-1][i] + matrix[m-1][i+1] matrix[i][m-1] = matrix[i][m-1] + matrix[i+1][m-1] for i in range(m-2, -1, -1): for j in range(n-2, -1, -1): if matrix[i][j+1] > matrix[i+1][j]: matrix[i][j] = matrix[i][j] + matrix[i+1][j] else: matrix[i][j] = matrix[i][j] + matrix[i][j+1] return matrix[0][0] @timing def p081(): try: with open('input/matrix.txt', 'r', encoding='utf-8') as fp: matrix = fp.readlines() except FileNotFoundError: print('Error while opening file matrix.txt') sys.exit(1) j = 0 for i in matrix: matrix[j] = list(map(int, i.strip().split(','))) j = j + 1 dist = sum_paths(matrix, 80, 80) print('Project Euler, Problem 81') print(f'Answer: {dist}') if __name__ == '__main__': p081()