diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-02-15 14:59:31 +0000 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-02-15 14:59:31 +0000 |
| commit | 1d943d93e690408fa34124bbcecf0f908eff5c1d (patch) | |
| tree | d3116529f6427e001ae1159c110e6df5683476ef | |
| parent | 5e1b8f19d3e1d29dce68c9b68e1f5757eb8ac3fb (diff) | |
| download | perlweeklychallenge-club-1d943d93e690408fa34124bbcecf0f908eff5c1d.tar.gz perlweeklychallenge-club-1d943d93e690408fa34124bbcecf0f908eff5c1d.tar.bz2 perlweeklychallenge-club-1d943d93e690408fa34124bbcecf0f908eff5c1d.zip | |
many tidies up
| -rw-r--r-- | challenge-152/james-smith/perl/ch-1.pl | 30 |
1 files 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; |
