aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-10-03 16:14:55 +0100
committerdrbaggy <js5@sanger.ac.uk>2022-10-03 16:14:55 +0100
commit7657182e8e995ecb2c072fcf734277de4fab17ca (patch)
tree721bcb8279129116631426bac726f800d186b7e8
parent83bc52b1fca0b905f547fc6b30895794c6c88ee7 (diff)
downloadperlweeklychallenge-club-7657182e8e995ecb2c072fcf734277de4fab17ca.tar.gz
perlweeklychallenge-club-7657182e8e995ecb2c072fcf734277de4fab17ca.tar.bz2
perlweeklychallenge-club-7657182e8e995ecb2c072fcf734277de4fab17ca.zip
fixed speed add split version
-rw-r--r--challenge-185/james-smith/perl/ch-2.pl22
1 files changed, 15 insertions, 7 deletions
diff --git a/challenge-185/james-smith/perl/ch-2.pl b/challenge-185/james-smith/perl/ch-2.pl
index b1276e6550..e4c212e33e 100644
--- a/challenge-185/james-smith/perl/ch-2.pl
+++ b/challenge-185/james-smith/perl/ch-2.pl
@@ -8,17 +8,25 @@ use Test::More;
use Benchmark qw(cmpthese timethis);
use Data::Dumper qw(Dumper);
-my $RE = '^'. '([^0-9a-z]*)([0-9a-z])' x 4; ## Create regex on fly;
+say my $RE = join '([^0-9a-z]*)', ( '[0-9a-z]' ) x 4;
my @TESTS = (
- [ ['ab-cde-123', '123.abc.420', '3abc-0010.xy'], ['xx-xxe-123', 'xxx.xbc.420', 'xxxx-0010.xy'] ],
- [ ['1234567.a', 'a-1234-bc', 'a.b.c.d.e.f' ], [ 'xxxx567.a', 'x-xxx4-bc', 'x.x.x.x.e.f' ] ],
+ [ ['ab-cde-123', '123.abc.420', '3abc-0010.xy'], [ 'xx-xxe-123', 'xxx.xbc.420', 'xxxx-0010.xy'] ],
+ [ ['1234567.a', 'a-1234-bc', 'a.b.c.d.e.f' ], [ 'xxxx567.a', 'x-xxx4-bc', 'x.x.x.x.e.f' ] ],
);
-is( "@{[ my_function(@{$_->[0]}) ]}", "@{$_->[1]}" ) for @TESTS;
+is( "@{[ solreg( @{$_->[0]}) ]}", "@{$_->[1]}" ) for @TESTS;
+is( "@{[ solreghc(@{$_->[0]}) ]}", "@{$_->[1]}" ) for @TESTS;
+is( "@{[ solsplit(@{$_->[0]}) ]}", "@{$_->[1]}" ) for @TESTS;
done_testing();
-
-
-sub my_function { map { s{$RE}{$1x$3x$5x$7x}or } @_; }
+cmpthese( 100_000, {
+ 'reg' => sub { solreg( @{$_->[0]} ) for @TESTS; },
+ 'reghc' => sub { solreghc( @{$_->[0]} ) for @TESTS; },
+ 'split' => sub { solsplit( @{$_->[0]} ) for @TESTS; },
+});
+
+sub solreg { map { s{$RE}{x$1x$2x$3x}or } @_ }
+sub solreghc { map { s{[0-9a-z]([^0-9a-z]*)[0-9a-z]([^0-9a-z]*)[0-9a-z]([^0-9a-z]*)[0-9a-z]}{x$1x$2x$3x}r } @_ }
+sub solsplit { map { join 'x', split /[0-9a-z]/, $_, 5; } @_ }