diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-02-16 10:18:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-16 10:18:29 +0000 |
| commit | 712148a0e4f8dd2c4ebc7cb3c00921feeba021e9 (patch) | |
| tree | c401b6a99485431b3080cc223919581befca9641 /challenge-152 | |
| parent | b240a2551300d4d59843c03eff12f681cb7dda7a (diff) | |
| parent | d863e9de7ddd1634fd55dc48bed0f52143c4ae2c (diff) | |
| download | perlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.tar.gz perlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.tar.bz2 perlweeklychallenge-club-712148a0e4f8dd2c4ebc7cb3c00921feeba021e9.zip | |
Merge pull request #5656 from fluca1978/PWC152
Pwc152
Diffstat (limited to 'challenge-152')
| -rw-r--r-- | challenge-152/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-152/luca-ferrari/blog-2.txt | 1 | ||||
| -rwxr-xr-x | challenge-152/luca-ferrari/raku/ch-1.p6 | 7 | ||||
| -rwxr-xr-x | challenge-152/luca-ferrari/raku/ch-2.p6 | 58 |
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; +} |
