aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-07-05 12:50:35 +0100
committerdrbaggy <js5@sanger.ac.uk>2021-07-05 12:50:35 +0100
commita8590c122cd7cafb611a27ebecf933aa76b1a494 (patch)
tree2c43b951d3cf203513c3e82817ca27cc79b0985f
parent21efa6593b05c64b48fe66e0321d9ddba14ced75 (diff)
downloadperlweeklychallenge-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.pl20
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);
}