diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-07-05 12:50:35 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-07-05 12:50:35 +0100 |
| commit | a8590c122cd7cafb611a27ebecf933aa76b1a494 (patch) | |
| tree | 2c43b951d3cf203513c3e82817ca27cc79b0985f | |
| parent | 21efa6593b05c64b48fe66e0321d9ddba14ced75 (diff) | |
| download | perlweeklychallenge-club-a8590c122cd7cafb611a27ebecf933aa76b1a494.tar.gz perlweeklychallenge-club-a8590c122cd7cafb611a27ebecf933aa76b1a494.tar.bz2 perlweeklychallenge-club-a8590c122cd7cafb611a27ebecf933aa76b1a494.zip | |
added speed
| -rw-r--r-- | challenge-120/james-smith/perl/ch-2.pl | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/challenge-120/james-smith/perl/ch-2.pl b/challenge-120/james-smith/perl/ch-2.pl index 0e1b595f78..83f4dc12d6 100644 --- a/challenge-120/james-smith/perl/ch-2.pl +++ b/challenge-120/james-smith/perl/ch-2.pl @@ -7,19 +7,25 @@ use feature qw(say); use Test::More; use Benchmark qw(cmpthese timethis); use Data::Dumper qw(Dumper); +no warnings 'numeric'; my @TESTS = ( [ '03:10', 35 ], [ '04:00', 120 ], + [ '08:00', 120 ], + [ '16:00', 120 ], + [ '18:00', 180 ], + [ '20:00', 120 ], ); is( clock_angle($_->[0]), $_->[1] ) foreach @TESTS; is( clock_angle_1_liner($_->[0]), $_->[1] ) foreach @TESTS; done_testing(); -cmpthese( 2_000_000, { - 'f' => sub { clock_angle($_->[0]) foreach @TESTS }, +cmpthese( 1_000_000, { + 's' => sub { clock_angle($_->[0]) foreach @TESTS }, '1' => sub { clock_angle_1_liner($_->[0]) foreach @TESTS }, + 'f' => sub { clock_angle_fast($_->[0]) foreach @TESTS }, }); sub clock_angle { @@ -30,10 +36,14 @@ sub clock_angle { ## If value is > 180 then we subtract from ## 360.... my($h,$m) = split /:/,shift; - my $a = abs($h*60-$m*11)%720/2; - return $a > 180 ? 360-$a : $a; + my $t = abs($h*60-$m*11)%720/2; + return $t > 180 ? 360-$t : $t; } sub clock_angle_1_liner { - 180-abs(abs(60*(substr$_[0],0,2)-11*substr$_[0],3)%720/2-180); + 180-abs((60*(substr$_[0],0,2)-11*substr$_[0],3)%720/2-180); +} + +sub clock_angle_fast { + 180-abs((60*$_[0]-11*substr$_[0],3)%720/2-180); } |
