diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-02-19 10:45:50 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-02-19 10:45:50 +0000 |
| commit | 1f8462dc1530287b987cbfdea1c717849292365d (patch) | |
| tree | 01bbb04f3e81ef599a717e7db918ba8501857077 /challenge-152 | |
| parent | 415c482600b3e41fe3b216eaea1dd77ba8c9f374 (diff) | |
| download | perlweeklychallenge-club-1f8462dc1530287b987cbfdea1c717849292365d.tar.gz perlweeklychallenge-club-1f8462dc1530287b987cbfdea1c717849292365d.tar.bz2 perlweeklychallenge-club-1f8462dc1530287b987cbfdea1c717849292365d.zip | |
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-152')
| -rw-r--r-- | challenge-152/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-152/laurent-rosenfeld/perl/ch-1.pl | 18 | ||||
| -rw-r--r-- | challenge-152/laurent-rosenfeld/perl/ch-2.pl | 28 | ||||
| -rw-r--r-- | challenge-152/laurent-rosenfeld/raku/ch-1.raku | 4 | ||||
| -rw-r--r-- | challenge-152/laurent-rosenfeld/raku/ch-2.raku | 17 |
5 files changed, 68 insertions, 0 deletions
diff --git a/challenge-152/laurent-rosenfeld/blog.txt b/challenge-152/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..d2900f5fbb --- /dev/null +++ b/challenge-152/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/perl-weekly-challenge-152-triangle-sum-path.html diff --git a/challenge-152/laurent-rosenfeld/perl/ch-1.pl b/challenge-152/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..0391011a0c --- /dev/null +++ b/challenge-152/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,18 @@ +use strict; +use warnings; +use feature "say"; + +sub min { + my $min = shift; + for (@_) { + $min = $_ if $_ < $min; + } + return $min; +} + +for my $triangle ([ [1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8] ], + [ [5], [2,3], [4,1,5], [0,1,2,3], [7,2,4,1,9] ]) { + my $sum = 0; + $sum += $_ for map { min(@$_) } @$triangle; + say join " ", (map { "[@$_]"} @$triangle), " -> $sum"; + } diff --git a/challenge-152/laurent-rosenfeld/perl/ch-2.pl b/challenge-152/laurent-rosenfeld/perl/ch-2.pl new file mode 100644 index 0000000000..700b08f7ac --- /dev/null +++ b/challenge-152/laurent-rosenfeld/perl/ch-2.pl @@ -0,0 +1,28 @@ +use strict; +use warnings; +use feature "say"; + +sub min { # min of 2 values + return $_[0] < $_[1] ? $_[0] : $_[1]; +} +sub max { # max of 2 values + return $_[0] < $_[1] ? $_[1] : $_[0]; +} +sub compute_area { + my $rect = shift; + my $area = ($rect->[1][0] - $rect->[0][0]) * ($rect->[1][1] - $rect->[0][1]); +} +for my $test ( [ [ [-1,0] , [2,2]], [ [ 0,-1], [4,4] ] ], + [ [ [-3,-1], [1,3]], [ [-1,-3], [2,2] ] ] ) { + my @overlap_rect = + ( [ max($test->[0][0][0], $test->[1][0][0]), # x 1st point + max($test->[0][0][1], $test->[1][0][1]) ], # y 1st point + [ min($test->[0][1][0], $test->[1][1][0]), # x 2nd point + min($test->[0][1][1], $test->[1][1][1]) ] # y 2nd point + ); + my $overlap_area = compute_area([@overlap_rect]); + my $area = compute_area($test->[0]) + compute_area($test->[1]) - $overlap_area; + my $display = "[ (@{$test->[0][0]}) (@{$test->[0][1]}) ] " . + "[ (@{$test->[1][0]}) (@{$test->[1][1]}) ]"; + say "Area of $display is: $area"; +} diff --git a/challenge-152/laurent-rosenfeld/raku/ch-1.raku b/challenge-152/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..4d7517b293 --- /dev/null +++ b/challenge-152/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,4 @@ +for ([1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8]), + ([5], [2,3], [4,1,5], [0,1,2,3], [7,2,4,1,9]) -> @tri { + say @tri, " -> ", sum map { $_.min }, @tri; + } diff --git a/challenge-152/laurent-rosenfeld/raku/ch-2.raku b/challenge-152/laurent-rosenfeld/raku/ch-2.raku new file mode 100644 index 0000000000..cc5498046b --- /dev/null +++ b/challenge-152/laurent-rosenfeld/raku/ch-2.raku @@ -0,0 +1,17 @@ +sub compute_area ( @rect) { + my $area = (@rect[1][0] - @rect[0][0]) * (@rect[1][1] - @rect[0][1]); +} +for ( ( ( (-1,0) , (2,2)), ( ( 0,-1), (4,4) ) ), + ( ( (-3,-1), (1,3)), ( (-1,-3), (2,2) ) ) + ) -> $test { + my @overlap_rect = + ( max($test[0][0][0], $test[1][0][0]), # x 1st point + max($test[0][0][1], $test[1][0][1]) ), # y 1st point + ( min($test[0][1][0], $test[1][1][0]), # x 2nd point + min($test[0][1][1], $test[1][1][1]) ); # y 2nd point + my $overlap_area = compute_area @overlap_rect; + my $area = compute_area($test[0]) + compute_area($test[1]) - $overlap_area; + my $display = "[ ($test[0][0]) ($test[0][1]) ] " ~ + "[ ($test[1][0]) ($test[1][1]) ]"; + say "Area of $display is: $area"; +} |
