aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-03-09 22:39:00 +0000
committerGitHub <noreply@github.com>2021-03-09 22:39:00 +0000
commita6eb9d56b6b4c1c83fea90657a84d5f8a38b74a1 (patch)
treef0bd0f96d867c03d5c0fc1abf05f6b45b2ed9bfd
parentdd678c5e9cab8a8021d6eea40f059fe0fdbdb340 (diff)
parent0665ceb1ef95816f405909d14aacad17d013eef2 (diff)
downloadperlweeklychallenge-club-a6eb9d56b6b4c1c83fea90657a84d5f8a38b74a1.tar.gz
perlweeklychallenge-club-a6eb9d56b6b4c1c83fea90657a84d5f8a38b74a1.tar.bz2
perlweeklychallenge-club-a6eb9d56b6b4c1c83fea90657a84d5f8a38b74a1.zip
Merge pull request #3700 from lancew/branch-for-challenge-103
Add perl solution
-rw-r--r--challenge-103/lance-wicks/perl/ch-1.pl10
-rw-r--r--challenge-103/lance-wicks/perl/lib/Zodiac.pm67
-rw-r--r--challenge-103/lance-wicks/perl/t/00-zodiac.t9
3 files changed, 86 insertions, 0 deletions
diff --git a/challenge-103/lance-wicks/perl/ch-1.pl b/challenge-103/lance-wicks/perl/ch-1.pl
new file mode 100644
index 0000000000..adb4d2f479
--- /dev/null
+++ b/challenge-103/lance-wicks/perl/ch-1.pl
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+
+use lib './lib';
+use Zodiac;
+
+my $zodiac = Zodiac->new;
+
+print $zodiac->sign_from_year($ARGV[0]);
+print "\n";
diff --git a/challenge-103/lance-wicks/perl/lib/Zodiac.pm b/challenge-103/lance-wicks/perl/lib/Zodiac.pm
new file mode 100644
index 0000000000..f578a236fb
--- /dev/null
+++ b/challenge-103/lance-wicks/perl/lib/Zodiac.pm
@@ -0,0 +1,67 @@
+package Zodiac;
+use Moo;
+
+sub _build_zodiac_table {
+
+ my @elements = (
+ qw/
+ Wood
+ Fire
+ Earth
+ Metal
+ Water
+ /
+ );
+
+ my @animals = (
+ qw/
+ Rat
+ Ox
+ Tiger
+ Rabbit
+ Dragon
+ Snake
+ Horse
+ Goat
+ Monkey
+ Rooster
+ Dog
+ Pig
+ /
+ );
+
+ my $elem_key = 0;
+
+ my %table;
+ for ( my $i = 1; $i <= 61; $i = $i + 2 ) {
+ $table{$i} = $elements[$elem_key];
+ $table{ $i + 1 } = $elements[$elem_key];
+
+ $elem_key++;
+ $elem_key = 0 if $elem_key > 4;
+ }
+
+ my $animal_key = 0;
+ for ( my $i = 1; $i <= 61; $i++ ) {
+ $table{$i} .= ' ' . $animals[$animal_key];
+
+ $animal_key++;
+ $animal_key = 0 if $animal_key > 11;
+ }
+
+ return \%table;
+
+}
+
+sub sign_from_year {
+ my ( $self, $year ) = @_;
+
+ my $table = _build_zodiac_table();
+ my $step1 = $year - 3;
+ my $step2 = int $step1 / 60;
+ my $step3 = $step1 - ( 60 * $step2 );
+
+ return $table->{$step3};
+}
+
+1;
diff --git a/challenge-103/lance-wicks/perl/t/00-zodiac.t b/challenge-103/lance-wicks/perl/t/00-zodiac.t
new file mode 100644
index 0000000000..2e0d835a57
--- /dev/null
+++ b/challenge-103/lance-wicks/perl/t/00-zodiac.t
@@ -0,0 +1,9 @@
+use Test2::V0 -target => 'Zodiac';
+
+is $CLASS->sign_from_year(1967), 'Fire Goat', '1967 -> Fire Goat';
+is $CLASS->sign_from_year(2017), 'Fire Rooster', '2017 -> Fire Rooster';
+is $CLASS->sign_from_year(1938), 'Earth Tiger', '1938 -> Earth Tiger';
+is $CLASS->sign_from_year(1973), 'Water Ox', '1973 -> Water Ox';
+is $CLASS->sign_from_year(2003), 'Water Goat', '2003 -> Water Goat';
+
+done_testing;