diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-02-15 02:16:39 +0000 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-02-15 02:16:39 +0000 |
| commit | fb0bb43a81c387ae7b22591c531121dc6fcf8337 (patch) | |
| tree | 7ddba8841f3568b2f16e44feb27c0dc6d35daad0 | |
| parent | 887b42cc87b17160f00fca3b3998f221d089506e (diff) | |
| download | perlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.tar.gz perlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.tar.bz2 perlweeklychallenge-club-fb0bb43a81c387ae7b22591c531121dc6fcf8337.zip | |
updated
| -rw-r--r-- | challenge-152/james-smith/README.md | 10 | ||||
| -rw-r--r-- | challenge-152/james-smith/perl/ch-1.pl | 33 | ||||
| -rw-r--r-- | challenge-152/james-smith/perl/ch-2.pl | 6 |
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); } |
