aboutsummaryrefslogtreecommitdiff
path: root/challenge-152
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-02-19 10:45:50 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-02-19 10:45:50 +0000
commit1f8462dc1530287b987cbfdea1c717849292365d (patch)
tree01bbb04f3e81ef599a717e7db918ba8501857077 /challenge-152
parent415c482600b3e41fe3b216eaea1dd77ba8c9f374 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-152/laurent-rosenfeld/perl/ch-1.pl18
-rw-r--r--challenge-152/laurent-rosenfeld/perl/ch-2.pl28
-rw-r--r--challenge-152/laurent-rosenfeld/raku/ch-1.raku4
-rw-r--r--challenge-152/laurent-rosenfeld/raku/ch-2.raku17
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";
+}