#!/usr/bin/perl use warnings; use strict; sub triangle_sum { my ($triangle) = @_; my @sums = @{ $triangle->[-1] }; @sums = map { $sums[$sums[ $_ - 1 ] < $sums[$_] ? $_ - 1 : $_] + $triangle->[@sums - 2][ $_ - 1 ] } 1 .. $#sums while @sums > 1; return $sums[0] } use Test::More; is triangle_sum ([ [1], [2,4], [6,4,9], [5,1,7,2] ]), 8, 'Example 1'; is triangle_sum ([ [3], [3,1], [5,2,3], [4,3,1,3] ]), 7, 'Example 2'; is triangle_sum([[2], [1, 5], [9, 10, 1]]), 8, 'Tricky'; done_testing();