aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-02-15 02:16:39 +0000
committerdrbaggy <js5@sanger.ac.uk>2022-02-15 02:16:39 +0000
commitfb0bb43a81c387ae7b22591c531121dc6fcf8337 (patch)
tree7ddba8841f3568b2f16e44feb27c0dc6d35daad0
parent887b42cc87b17160f00fca3b3998f221d089506e (diff)
downloadperlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.tar.gz
perlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.tar.bz2
perlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.zip
updated
-rw-r--r--challenge-152/james-smith/README.md10
-rw-r--r--challenge-152/james-smith/perl/ch-1.pl33
-rw-r--r--challenge-152/james-smith/perl/ch-2.pl6
3 files changed, 37 insertions, 12 deletions
diff --git a/challenge-152/james-smith/README.md b/challenge-152/james-smith/README.md
index 591aa3f504..a128b2762a 100644
--- a/challenge-152/james-smith/README.md
+++ b/challenge-152/james-smith/README.md
@@ -92,18 +92,18 @@ sub my_area {
## Compute 3 widths and heights...
- my $w3 = ( my $w2 = $r->[0] - $l->[0] ) ## width rectangle 2
- + ( my $w1 = $R->[0] - $L->[0] ) ## width rectangle 1
+ my $w3 = ( my $w1 = $r->[0] - $l->[0] ) ## width rectangle 1
+ + ( my $w2 = $R->[0] - $L->[0] ) ## width rectangle 2
- ( $r->[0] > $R->[0] ? $r->[0] : $R->[0] ) ## right most point
+ ( $l->[0] < $L->[0] ? $l->[0] : $L->[0] ); ## left most point
- my $h3 = ( my $h2 = $r->[1] - $l->[1] ) ## height rectangle 2
- + ( my $h1 = $R->[1] - $L->[1] ) ## height rectangle 1
+ my $h3 = ( my $h1 = $r->[1] - $l->[1] ) ## height rectangle 1
+ + ( my $h2 = $R->[1] - $L->[1] ) ## height rectangle 2
- ( $r->[1] > $R->[1] ? $r->[1] : $R->[1] ) ## highest point
+ ( $l->[1] < $L->[1] ? $l->[1] : $L->[1] ); ## lowest point
## Return result...
- $w1*$h1 + $w2*$h2 - ( $w3>0 && $h3>0 ? $w3*$h3 : 0 );
+ $w1*$h1 + $w2*$h2 - ($w3>0 && $h3>0 && $w3*$h3);
}
```
diff --git a/challenge-152/james-smith/perl/ch-1.pl b/challenge-152/james-smith/perl/ch-1.pl
index 09694f5f69..17630026ed 100644
--- a/challenge-152/james-smith/perl/ch-1.pl
+++ b/challenge-152/james-smith/perl/ch-1.pl
@@ -13,28 +13,53 @@ my @TESTS = (
[ [ [5], [2,3], [4,1,5], [0,1,2,3], [7,2,4,1,9] ], 11, 9 ],
);
-is( min_path( $_->[0]), $_->[1] ) foreach @TESTS;
-is( min_path_anydir($_->[0]), $_->[2] ) foreach @TESTS;
+is( min_path( $_->[0] ), $_->[1] ) foreach @TESTS;
+is( min_path_anydir( $_->[0] ), $_->[2] ) foreach @TESTS;
+is( min_path_total( $_->[0] ), $_->[1] ) foreach @TESTS;
+is( min_path_anydir_total( $_->[0] ), $_->[2] ) foreach @TESTS;
done_testing();
sub min_path {
my @p = map { [0,[]] } 0,my @t = reverse @{$_[0]};
for my $r (@t) {
- my($l,@q,$z) = shift @p;
+ 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;
}
+ 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;
+ }
+ $p[0];
+}
+
sub min_path_anydir {
+ my ($res,@order) = 0;
+ foreach(@{$_[0]}) {
+ my $min = $_[0][0];
+ $min = $_ < $min ? $_ : $min for @{$_};
+ $res+= $min;
+ push @order, $min;
+ }
+ say sprintf 'Minimum value %d: [ %s ]', $res, join ', ', @order;
+ $res;
+}
+
+sub min_path_anydir_total {
my $res = 0;
foreach(@{$_[0]}) {
- my $min = 1e99;
+ my $min = $_[0][0];
$min = $_ < $min ? $_ : $min for @{$_};
$res+= $min;
}
diff --git a/challenge-152/james-smith/perl/ch-2.pl b/challenge-152/james-smith/perl/ch-2.pl
index 2da67affbf..05164f9308 100644
--- a/challenge-152/james-smith/perl/ch-2.pl
+++ b/challenge-152/james-smith/perl/ch-2.pl
@@ -21,8 +21,8 @@ done_testing();
sub my_area {
my ($l,$r,$L,$R) = @_;
- my $w3 = (my $w2 = $r->[0]-$l->[0]) + (my $w1 = $R->[0]-$L->[0]) + ($l->[0]<$L->[0]?$l->[0]:$L->[0]) - ($r->[0]>$R->[0]?$r->[0]:$R->[0]);
- my $h3 = (my $h2 = $r->[1]-$l->[1]) + (my $h1 = $R->[1]-$L->[1]) + ($l->[1]<$L->[1]?$l->[1]:$L->[1]) - ($r->[1]>$R->[1]?$r->[1]:$R->[1]);
- $w1*$h1 + $w2*$h2 - ( $w3>0 && $h3>0 ? $w3*$h3 : 0 );
+ my $w3 = (my $w1 = $r->[0]-$l->[0]) + (my $w2 = $R->[0]-$L->[0]) + ($l->[0]<$L->[0]?$l->[0]:$L->[0]) - ($r->[0]>$R->[0]?$r->[0]:$R->[0]);
+ my $h3 = (my $h1 = $r->[1]-$l->[1]) + (my $h2 = $R->[1]-$L->[1]) + ($l->[1]<$L->[1]?$l->[1]:$L->[1]) - ($r->[1]>$R->[1]?$r->[1]:$R->[1]);
+ $w1*$h1 + $w2*$h2 - ($w3>0 && $h3>0 && $w3*$h3);
}