From 1d943d93e690408fa34124bbcecf0f908eff5c1d Mon Sep 17 00:00:00 2001 From: drbaggy Date: Tue, 15 Feb 2022 14:59:31 +0000 Subject: many tidies up --- challenge-152/james-smith/perl/ch-1.pl | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/challenge-152/james-smith/perl/ch-1.pl b/challenge-152/james-smith/perl/ch-1.pl index 17630026ed..8b013c4ca8 100644 --- a/challenge-152/james-smith/perl/ch-1.pl +++ b/challenge-152/james-smith/perl/ch-1.pl @@ -22,33 +22,27 @@ done_testing(); sub min_path { my @p = map { [0,[]] } 0,my @t = reverse @{$_[0]}; - for my $r (@t) { - my($l,@q) = shift @p; - ( push @q, $l->[0] < $p[0][0] - ? [ $_+$l->[0], [ $_, @{$l->[1]} ] ] - : [ $_+$p[0][0], [ $_, @{$p[0][1]} ] ] - ), $l = shift @p for @{$r}; - @p = @q; - } + @p = map { + $p[0][0] < $p[1][0] + ? [ $_+$p[0][0], [ $_, @{$p[0][1]} ] ] + : [ $_+$p[1][0], [ $_, @{$p[1][1]} ] ], + (shift @p) x 0 + } @{$_} for @t; say sprintf 'Minimum value %d: [ %s ]', $p[0][0], join ', ', @{$p[0][1]}; $p[0][0]; } sub min_path_total { - my @p = map { 0 } 0,my @t = reverse @{$_[0]}; - for my $r (@t) { - my($l,@q) = shift @p; - ( push @q, $_ + ( $l < $p[0] ? $l : $p[0] ) ), $l = shift @p for @{$r}; - @p = @q; - } + my @p = map { 0 } 0, my @t = reverse @{$_[0]}; + @p = map { $_ + $p[ $p[0] < $p[1] ? 0 : 1 ], (shift @p)x 0 } @{$_} for @t; $p[0]; } sub min_path_anydir { my ($res,@order) = 0; foreach(@{$_[0]}) { - my $min = $_[0][0]; - $min = $_ < $min ? $_ : $min for @{$_}; + my $min = $_->[0]; + $_<$min && ($min = $_) for @{$_}; $res+= $min; push @order, $min; } @@ -59,8 +53,8 @@ sub min_path_anydir { sub min_path_anydir_total { my $res = 0; foreach(@{$_[0]}) { - my $min = $_[0][0]; - $min = $_ < $min ? $_ : $min for @{$_}; + my $min = $_->[0]; + $_ < $min && ($min = $_) for @{$_}; $res+= $min; } $res; -- cgit