From 7657182e8e995ecb2c072fcf734277de4fab17ca Mon Sep 17 00:00:00 2001 From: drbaggy Date: Mon, 3 Oct 2022 16:14:55 +0100 Subject: fixed speed add split version --- challenge-185/james-smith/perl/ch-2.pl | 22 +++++++++++++++------- 1 file 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; } @_ } -- cgit