diff options
| author | Util <bruce.gray@acm.org> | 2021-08-01 17:38:38 -0500 |
|---|---|---|
| committer | Util <bruce.gray@acm.org> | 2021-08-01 17:38:38 -0500 |
| commit | fc6ab7307ecfd27655bc3625f7aa008605ee43e5 (patch) | |
| tree | 9ffb383ca419cd44e1daf36553f98d93f9418104 | |
| parent | e2ad1e1161f33392378b36684bf2d0adf6a37b8b (diff) | |
| download | perlweeklychallenge-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.pl | 8 | ||||
| -rw-r--r-- | challenge-123/bruce-gray/raku/ch-1.raku | 7 |
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; |
