diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2021-02-15 15:30:08 +0100 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2021-02-21 18:19:25 +0100 |
| commit | 48ccb1259b08423067789483ab4a7be1c851b3f4 (patch) | |
| tree | 75e595f42407ebabe4fc297cfc3fc25f42ea128d | |
| parent | ae7b9896c7a0068a7c6dabade73b5407274a7feb (diff) | |
| download | perlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.tar.gz perlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.tar.bz2 perlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.zip | |
add perl solution for wk-100 ch-2
| -rwxr-xr-x | challenge-100/alexander-pankoff/perl/ch-2.pl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/challenge-100/alexander-pankoff/perl/ch-2.pl b/challenge-100/alexander-pankoff/perl/ch-2.pl new file mode 100755 index 0000000000..4027ecf9a8 --- /dev/null +++ b/challenge-100/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,40 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(min); + +{ + test_triangle_sum(); +} + +sub test_triangle_sum() { + + my @test_cases = ( + [ [ [1], [ 2, 4 ], [ 6, 4, 9 ], [ 5, 1, 7, 2 ] ], 8 ], + [ [ [3], [ 3, 1 ], [ 5, 2, 3 ], [ 4, 3, 1, 3 ] ], 7 ] + ); + + require Test::More; + Test::More->import( tests => scalar @test_cases ); + + for my $test (@test_cases) { + my ( $triangle, $expected_sum ) = @{$test}; + ok( + triangle_sum($triangle) == $expected_sum, + "The minimum path is $expected_sum" + ); + } +} + +sub triangle_sum ( $triangle, $pos = 0 ) { + my ( $cur, @rest ) = @$triangle; + return 0 if !$cur; + + return $cur->[$pos] + + min( triangle_sum( \@rest, $pos ), triangle_sum( \@rest, $pos + 1 ), ); +} |
