return min(reduce(lambda a,b:map(min,zip(map(sum,zip([9**99]+a,b)),map(sum,zip(a+[9**99],b)))),triangle))
What this code does:
For each level from top, check the sums from previous level to next level (max 2 ways for each next-level element), pick the smaller one. Iterate through the triangle, pick the min from the result.
Complexity: n^2 time, n^2 space.(due to list copy inside lambda)
The challenge: show more concise or efficient one liner for this problem.