aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUtil <bruce.gray@acm.org>2021-08-01 17:38:38 -0500
committerUtil <bruce.gray@acm.org>2021-08-01 17:38:38 -0500
commitfc6ab7307ecfd27655bc3625f7aa008605ee43e5 (patch)
tree9ffb383ca419cd44e1daf36553f98d93f9418104
parente2ad1e1161f33392378b36684bf2d0adf6a37b8b (diff)
downloadperlweeklychallenge-club-fc6ab7307ecfd27655bc3625f7aa008605ee43e5.tar.gz
perlweeklychallenge-club-fc6ab7307ecfd27655bc3625f7aa008605ee43e5.tar.bz2
perlweeklychallenge-club-fc6ab7307ecfd27655bc3625f7aa008605ee43e5.zip
Add test case for rectangle, and fix code.
-rw-r--r--challenge-123/bruce-gray/perl/ch-1.pl8
-rw-r--r--challenge-123/bruce-gray/raku/ch-1.raku7
2 files changed, 13 insertions, 2 deletions
diff --git a/challenge-123/bruce-gray/perl/ch-1.pl b/challenge-123/bruce-gray/perl/ch-1.pl
index b0887676cd..f6b5d5a80f 100644
--- a/challenge-123/bruce-gray/perl/ch-1.pl
+++ b/challenge-123/bruce-gray/perl/ch-1.pl
@@ -11,10 +11,15 @@ sub is_square {
push @{ $xy{ 'x'.$_->[0] } }, $_ for @_;
push @{ $xy{ 'y'.$_->[1] } }, $_ for @_;
+ my ($A, $B, $C, $D) = sort { $a->[0] <=> $b->[0]
+ or $a->[1] <=> $b->[1] } @_;
+
my @unique_points = uniq map { join ',', @{$_} } @_;
my @unaligned_points = grep { @{$_} != 2 } values %xy;
+ my $lr_sides_eq_tb = ( $C->[0] - $A->[0] == $B->[1] - $A->[1] );
- return 0 + ( @unique_points == 4
+ return 0 + ( $lr_sides_eq_tb
+ and @unique_points == 4
and @unaligned_points == 0 );
}
@@ -22,6 +27,7 @@ my @tests = (
[ SampleA => 1, [10,20],[20,20],[20,10],[10,10] ],
[ SampleB => 0, [12,24],[16,10],[20,12],[18,16] ],
[ NotUnique => 0, [10,20],[20,10],[10,20],[20,10] ],
+ [ Rectangle => 0, [10,10],[90,10],[90,20],[10,20] ],
);
plan tests => 0+@tests;
for my $t (@tests) {
diff --git a/challenge-123/bruce-gray/raku/ch-1.raku b/challenge-123/bruce-gray/raku/ch-1.raku
index bd32953b4e..5d4f442dc5 100644
--- a/challenge-123/bruce-gray/raku/ch-1.raku
+++ b/challenge-123/bruce-gray/raku/ch-1.raku
@@ -1,7 +1,11 @@
sub is-square ( @p where *.elems == 4 ) {
my %xy = @p.categorize( <x y> Z~ *.list );
- return @p.map(*.Str).unique == 4
+ my ($left-side, $bottom-side) = .[2][0] - .[0][0],
+ .[1][1] - .[0][1] given @p.sort;
+
+ return $bottom-side == $left-side
+ && @p.map(*.Str).unique == 4
&& so %xy.values.all == 2;
}
@@ -9,6 +13,7 @@ my @tests =
( 'SampleA' , True , ((10,20),(20,20),(20,10),(10,10)) ),
( 'SampleB' , False , ((12,24),(16,10),(20,12),(18,16)) ),
( 'NotUnique' , False , ((10,20),(20,10),(10,20),(20,10)) ),
+ ( 'Rectangle' , False , ((10,10),(90,10),(90,20),(10,20)) ),
;
use Test;
plan +@tests;