From fc6ab7307ecfd27655bc3625f7aa008605ee43e5 Mon Sep 17 00:00:00 2001 From: Util Date: Sun, 1 Aug 2021 17:38:38 -0500 Subject: Add test case for rectangle, and fix code. --- challenge-123/bruce-gray/perl/ch-1.pl | 8 +++++++- 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( 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; -- cgit