aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-05-06 22:21:44 +0100
committerdrbaggy <js5@sanger.ac.uk>2021-05-06 22:21:44 +0100
commit354676341849778db92bcf740a1b30f81eca3251 (patch)
treece9ea42d378f0d68d39fdf01398ba0457b43743f
parent28f5aa2e1113cf9df7a58acce9d0faeb517ed032 (diff)
downloadperlweeklychallenge-club-354676341849778db92bcf740a1b30f81eca3251.tar.gz
perlweeklychallenge-club-354676341849778db92bcf740a1b30f81eca3251.tar.bz2
perlweeklychallenge-club-354676341849778db92bcf740a1b30f81eca3251.zip
pre-cached speed
-rw-r--r--challenge-111/james-smith/perl/ch-1.pl19
1 files changed, 19 insertions, 0 deletions
diff --git a/challenge-111/james-smith/perl/ch-1.pl b/challenge-111/james-smith/perl/ch-1.pl
index 199acc31cd..c6eec10202 100644
--- a/challenge-111/james-smith/perl/ch-1.pl
+++ b/challenge-111/james-smith/perl/ch-1.pl
@@ -72,6 +72,9 @@ my $matrix = [
];
my @M = @{$matrix};
+my $F = [ map { @{$_} } @M ];
+my $H = {};
+@{$H}{@{$F}}=();
## Create a test set - numbers from -10 to 60...
my %TEST_SET = map { $_ => 0 } (my @KEYS = -10..60);
@@ -87,15 +90,20 @@ is( find_val_search( 35, $matrix ), 0 );
is( find_val_search( 39, $matrix ), 1 );
is( find_val_hash( 35, $matrix ), 0 );
is( find_val_hash( 39, $matrix ), 1 );
+is( find_val_hash_pre( 35, $H ), 0 );
+is( find_val_hash_pre( 39, $H ), 1 );
is( find_val_map_grep( 35, $matrix ), 0 );
is( find_val_map_grep( 39, $matrix ), 1 );
is( find_val_grep_map( 35, $matrix ), 0 );
is( find_val_grep_map( 39, $matrix ), 1 );
+is( find_val_grep_pre( 35, $F ), 0 );
+is( find_val_grep_pre( 39, $F ), 1 );
is( find_val_dnf( 35, $matrix ), 0 );
is( find_val_dnf( 39, $matrix ), 1 );
is( find_val_dnf_optimal( 35, $matrix ), 0 );
is( find_val_dnf_optimal( 39, $matrix ), 1 );
+
## Now run our full test set - from -10 to 60. This covers
## all cases within the list and a few either side...
@@ -114,6 +122,8 @@ cmpthese(100_000, {
'Flatten' => sub { flatten( $_, $matrix ) foreach @KEYS; },
'Flatten-@' => sub { flatten_array( $_, @M ) foreach @KEYS; },
'Hash' => sub { find_val_hash( $_, $matrix ) foreach @KEYS; },
+ 'Hash-%' => sub { find_val_hash_pre( $_, $H ) foreach @KEYS; },
+ 'Grep-@' => sub { find_val_grep_pre( $_, $F ) foreach @KEYS; },
'Search' => sub { find_val_search( $_, $matrix ) foreach @KEYS; },
'Grep-Map' => sub { find_val_grep_map( $_, $matrix ) foreach @KEYS; },
'Map-Grep' => sub { find_val_map_grep( $_, $matrix ) foreach @KEYS; },
@@ -160,6 +170,10 @@ sub find_val_hash {
return exists $list{$_[0]} ? 1: 0;
}
+sub find_val_hash_pre {
+ return exists $_[1]{$_[0]} ? 1: 0;
+}
+
sub find_val_map_grep {
my($v,$m)=@_;
return 0 + map { grep { $_ == $v } @{$_} } @{$m};
@@ -170,6 +184,11 @@ sub find_val_grep_map {
return 0 + grep { $_ == $v } map { @{$_} } @{$m};
}
+sub find_val_grep_pre {
+ my($v,$m)=@_;
+ return 0 + grep { $_ == $v } @{$m};
+}
+
sub find_val_search {
## Flatten the array provided into a list...
my( $val, $m, @list ) = ( $_[0], 0, map { @{$_} } @{$_[1]} );