18.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. def loadTriangle():
  2. """
  3. Returns a list of lists for the triangle stored in file
  4. """
  5. f = open("18_triangle.txt", 'r')
  6. triangle = f.read().split("\n")
  7. for row in range(len(triangle)):
  8. triangle[row] = list(map(int, triangle[row].split()))
  9. return triangle
  10. def addBottom(triangle):
  11. """
  12. Adds maximum values from the bottom row to the row above, reducing the
  13. number of rows in the triangle
  14. """
  15. newTriangle = triangle[:-1]
  16. # maxBottom is a list that contains the maximum values corresponding to the
  17. # second to last row
  18. maxBottom = []
  19. for s in range(0,len(triangle[-1])-1):
  20. b = s + 1
  21. maxBottom.append(max([triangle[-1][s],triangle[-1][b]]))
  22. # Adds value of maxBottom to second to last row in the new triangle
  23. for value in range(len(newTriangle[-1])):
  24. newTriangle[-1][value] += maxBottom[value]
  25. return newTriangle
  26. def main():
  27. """ Main loop, iterates through triangle until only top value is left """
  28. triangle = loadTriangle()
  29. while len(triangle) > 1:
  30. triangle = addBottom(triangle)
  31. return triangle[0][0]
  32. print(main())