# By starting at the top of the triangle below and moving to adjacent numbers
# on the row below, the maximum total from top to bottom is 23.
#
# 3
# 7 4
# 2 4 6
# 8 5 9 3
#
# That is, 3 + 7 + 4 + 9 = 23.
#
# Find the maximum total from top to bottom in triangle.txt (right click and
# 'Save Link/Target As...'), a 15K text file containing a triangle with
# one-hundred rows.
#
# NOTE: This is a much more difficult version of Problem 18. It is not
# possible to try every route to solve this problem, as there are 299
# altogether! If you could check one trillion (1012) routes every second it
# would take over twenty billion years to check them all. There is an efficient
# algorithm to solve it. ;o)

using ProjectEulerSolutions

# Convert a string representation of a pyramid of numbers from a file into an
# integer representation.
function pyramid_from_file(path::String)::Vector{Vector{Integer}}
    pyramid = Vector{Vector{Integer}}()
    open(path) do file
        for row in eachline(file)
            if length(row) > 0
                cols = map(x->convert(Integer, parse(Int, x)), split(row, " "))
                push!(pyramid, cols)
            end
        end
    end
    return pyramid
end

p067 = Problems.Problem(max_path_through_pyramid)

input_path = "data/p067_triangle.txt"

Problems.benchmark(p067, pyramid_from_file(input_path))
