aboutsummaryrefslogtreecommitdiff
path: root/challenge-120
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-120')
-rw-r--r--challenge-120/lance-wicks/perl/ch-2.pl11
-rw-r--r--challenge-120/lance-wicks/perl/lib/Clock.pm36
-rw-r--r--challenge-120/lance-wicks/perl/t/02-clock.t27
3 files changed, 74 insertions, 0 deletions
diff --git a/challenge-120/lance-wicks/perl/ch-2.pl b/challenge-120/lance-wicks/perl/ch-2.pl
new file mode 100644
index 0000000000..ff11b00233
--- /dev/null
+++ b/challenge-120/lance-wicks/perl/ch-2.pl
@@ -0,0 +1,11 @@
+use strict;
+use warnings;
+use Modern::Perl;
+
+use lib './lib';
+use Clock;
+
+my $clock = Clock->new;
+
+
+say $clock->angle($ARGV[0]) . ' Degrees';
diff --git a/challenge-120/lance-wicks/perl/lib/Clock.pm b/challenge-120/lance-wicks/perl/lib/Clock.pm
new file mode 100644
index 0000000000..98fe2bf8ac
--- /dev/null
+++ b/challenge-120/lance-wicks/perl/lib/Clock.pm
@@ -0,0 +1,36 @@
+package Clock;
+
+use Moo;
+
+sub angle {
+ my ( $self, $t ) = @_;
+
+ $t =~ /^(\d+):(\d+)$/;
+ my $hour_hand_angle = $self->angle_hour( h => $1, m => $2 );
+ my $minute_hand_angle = $self->angle_minute( h => $1, m => $2 );
+
+ return $hour_hand_angle - $minute_hand_angle;
+
+}
+
+sub angle_hour {
+ my ( $self, %args ) = @_;
+
+ my $h = $args{h};
+ my $m = $args{m};
+
+ my $mins = ( $h * 60 ) + $m;
+
+ return $mins * 0.5;
+}
+
+sub angle_minute {
+ my ( $self, %args ) = @_;
+
+ my $h = $args{h};
+ my $m = $args{m};
+
+ return $m * 6;
+}
+
+1;
diff --git a/challenge-120/lance-wicks/perl/t/02-clock.t b/challenge-120/lance-wicks/perl/t/02-clock.t
new file mode 100644
index 0000000000..474fc9bbbe
--- /dev/null
+++ b/challenge-120/lance-wicks/perl/t/02-clock.t
@@ -0,0 +1,27 @@
+use Test2::V0 -target => Clock;
+
+my @tests = (
+ { given => '03:10', expected => 35 },
+ { given => '04:00', expected => 120 },
+);
+
+for (@tests) {
+ is $CLASS->angle( $_->{given} ), $_->{expected},
+ "angle( '$_->{given}' ) returns: $_->{expected}";
+}
+
+subtest 'Hour angle' => sub {
+ note 'Hour hand moves .5 degrees per minute';
+ my $expected = ( ( 3 * 60 ) + 10 ) * .5;
+ my $got = $CLASS->angle_hour( h => 3, m => 10 );
+ is $got, $expected, "Got: $got, expected: $expected";
+};
+
+subtest 'Minute angle' => sub {
+ note 'Minute hand moves 6 degrees per minute';
+ my $expected = 10 * 6;
+ my $got = $CLASS->angle_minute( h => 3, m => 10 );
+ is $got, $expected, "Got: $got, expected: $expected";
+};
+
+done_testing;