diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-05-03 23:45:57 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-05-03 23:45:57 +0100 |
| commit | 1e135a6c126615ff7433e9022f70ff078ba6bb13 (patch) | |
| tree | f6f8beb71db1da9ea4eb17a6580209e6cab24d96 | |
| parent | 0eefe3f74139bb656a70eb3f8c38b67a5f4067eb (diff) | |
| download | perlweeklychallenge-club-1e135a6c126615ff7433e9022f70ff078ba6bb13.tar.gz perlweeklychallenge-club-1e135a6c126615ff7433e9022f70ff078ba6bb13.tar.bz2 perlweeklychallenge-club-1e135a6c126615ff7433e9022f70ff078ba6bb13.zip | |
fixed left end bug
| -rw-r--r-- | challenge-111/james-smith/perl/ch-1.pl | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/challenge-111/james-smith/perl/ch-1.pl b/challenge-111/james-smith/perl/ch-1.pl index 2c46d1bdeb..d4cab57a2c 100644 --- a/challenge-111/james-smith/perl/ch-1.pl +++ b/challenge-111/james-smith/perl/ch-1.pl @@ -14,23 +14,32 @@ my $matrix = [ [ 45, 47, 48, 49, 50 ], ]; -is( find_value( 35, $matrix ), 0 ); -is( find_value( 39, $matrix ), 1 ); -is( find_value( 3, $matrix ), 1 ); -is( find_value( 8, $matrix ), 0 ); -is( find_value( 23, $matrix ), 1 ); -is( find_value( 41, $matrix ), 0 ); +## Create a test set - numbers from -10 to 60... +my %TEST_SET = map { $_ => 0 } (-10..60); +## Set all to 0 and then set all in matrix to 1 +$TEST_SET{$_} = 1 foreach map { @{$_} } @{$matrix}; + +is( find_val( 35, $matrix ), 0 ); +is( find_val( 39, $matrix ), 1 ); +is( find_val( 3, $matrix ), 1 ); +is( find_val( 8, $matrix ), 0 ); +is( find_val( 23, $matrix ), 1 ); +is( find_val( 41, $matrix ), 0 ); + +## Full test set! Try all numbers from -10 to 60 +## { either side of the list! } +is( find_val( $_, $matrix ), $TEST_SET{$_} ) + foreach sort {$a<=>$b} keys %TEST_SET; done_testing(); -sub find_value { - my( $value, $m, @list ) = ( $_[0], 0, map { @{$_} } @{$_[1]} ); - ( $m = @list >> 1 ) - && ( $list[$m] == $value ) - ? ( return 1 ) - : ( $list[$m] > $value ) - ? ( @list = @list[0 .. $m-1] ) - : ( splice @list, 0, $m ) while @list>1; - return 0; +sub find_val { + my( $val, $m, @list ) = ( $_[0], 0, map { @{$_} } @{$_[1]} ); + + $list[ $m = @list >> 1 ] == $val ? ( return 1 ) + : $list[ $m ] > $val ? ( splice @list, $m ) + : ( splice @list, 0, $m ) + while @list>1; + return @list && $list[0] == $val ? 1 : 0; } |
