diff options
Diffstat (limited to 'challenge-120')
| -rw-r--r-- | challenge-120/lance-wicks/perl/ch-2.pl | 11 | ||||
| -rw-r--r-- | challenge-120/lance-wicks/perl/lib/Clock.pm | 36 | ||||
| -rw-r--r-- | challenge-120/lance-wicks/perl/t/02-clock.t | 27 |
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; |
