aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2021-02-15 15:30:08 +0100
committerAlexander Pankoff <ccntrq@screenri.de>2021-02-21 18:19:25 +0100
commit48ccb1259b08423067789483ab4a7be1c851b3f4 (patch)
tree75e595f42407ebabe4fc297cfc3fc25f42ea128d
parentae7b9896c7a0068a7c6dabade73b5407274a7feb (diff)
downloadperlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.tar.gz
perlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.tar.bz2
perlweeklychallenge-club-48ccb1259b08423067789483ab4a7be1c851b3f4.zip
add perl solution for wk-100 ch-2
-rwxr-xr-xchallenge-100/alexander-pankoff/perl/ch-2.pl40
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 ), );
+}