aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-02-16 10:18:29 +0000
committerGitHub <noreply@github.com>2022-02-16 10:18:29 +0000
commit712148a0e4f8dd2c4ebc7cb3c00921feeba021e9 (patch)
treec401b6a99485431b3080cc223919581befca9641
parentb240a2551300d4d59843c03eff12f681cb7dda7a (diff)
parentd863e9de7ddd1634fd55dc48bed0f52143c4ae2c (diff)
downloadperlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.tar.gz
perlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.tar.bz2
perlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.zip
Merge pull request #5656 from fluca1978/PWC152
Pwc152
-rw-r--r--challenge-152/luca-ferrari/blog-1.txt1
-rw-r--r--challenge-152/luca-ferrari/blog-2.txt1
-rwxr-xr-xchallenge-152/luca-ferrari/raku/ch-1.p67
-rwxr-xr-xchallenge-152/luca-ferrari/raku/ch-2.p658
4 files changed, 67 insertions, 0 deletions
diff --git a/challenge-152/luca-ferrari/blog-1.txt b/challenge-152/luca-ferrari/blog-1.txt
new file mode 100644
index 0000000000..1ff054de6b
--- /dev/null
+++ b/challenge-152/luca-ferrari/blog-1.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/02/14/PerlWeeklyChallenge152.html#task1
diff --git a/challenge-152/luca-ferrari/blog-2.txt b/challenge-152/luca-ferrari/blog-2.txt
new file mode 100644
index 0000000000..e86f18d955
--- /dev/null
+++ b/challenge-152/luca-ferrari/blog-2.txt
@@ -0,0 +1 @@
+https://fluca1978.github.io/2022/02/14/PerlWeeklyChallenge152.html#task2
diff --git a/challenge-152/luca-ferrari/raku/ch-1.p6 b/challenge-152/luca-ferrari/raku/ch-1.p6
new file mode 100755
index 0000000000..d4414394c1
--- /dev/null
+++ b/challenge-152/luca-ferrari/raku/ch-1.p6
@@ -0,0 +1,7 @@
+#!raku
+
+sub MAIN() {
+ my @triangle = [ [1], [5,3], [2,3,4], [7,1,0,2], [6,4,5,2,8] ];
+ my $sum += $_.min for @triangle;
+ $sum.say;
+}
diff --git a/challenge-152/luca-ferrari/raku/ch-2.p6 b/challenge-152/luca-ferrari/raku/ch-2.p6
new file mode 100755
index 0000000000..c68c8c447a
--- /dev/null
+++ b/challenge-152/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,58 @@
+#!raku
+
+class Point {
+ has Int $.x;
+ has Int $.y;
+}
+
+
+class Rectangle {
+ has Point $.corner-left;
+ has Point $.corner-right;
+
+ method area() {
+ abs( $!corner-right.x - $!corner-left.x )
+ * abs( $!corner-right.y - $!corner-left.y );
+ }
+
+
+ method !is-overlapping( Rectangle $r ) {
+ ( $!corner-left.x <= $r.corner-left.x <= $!corner-right.x
+ || $!corner-left.x <= $r.corner-righ.x <= $!corner-right.x )
+ &&
+ ( $!corner-left.y <= $r.corner-left.y <= $!corner-right.y
+ || $!corner-left.y <= $r.corner-right.y <= $!corner-right.y );
+
+ }
+
+ method overlapping-area( Rectangle $r ) {
+ return 0 if ! self!is-overlapping( $r );
+
+ my $left = Point.new( x => max( $!corner-left.x, $r.corner-left.x ),
+ y => max( $!corner-left.y, $r.corner-left.y )
+ );
+ my $right = Point.new( x => min( $!corner-right.x, $r.corner-right.x ),
+ y => min( $!corner-right.y, $r.corner-right.y )
+ );
+
+ my Rectangle $overlapping = Rectangle.new:
+ corner-left => $left,
+ corner-right => $right;
+ return $overlapping.area;
+
+ }
+}
+
+# Example:
+# $ raku ch-2.p6 -1 0 2 2 0 -1 4 4
+# 22
+#
+# $ raku ch-2.p6 -3 -1 1 3 -1 -3 2 2
+# 25
+sub MAIN( *@points where { @points.elems == 8 && @points.grep( * ~~ Int ) == @points.elems } ) {
+ my @corners = @points.rotor( 2 ).map: { Point.new( x => $_[ 0 ].Int, y => $_[ 1 ].Int ) };
+ my Rectangle ( $r1, $r2 ) = @corners.rotor( 2 ).map: { Rectangle.new(
+ corner-left => $_[ 0 ],
+ corner-right => $_[ 1 ] ) };
+ "{ $r1.area + $r2.area - $r1.overlapping-area( $r2 ) }".say;
+}