diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-03-09 22:39:00 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-09 22:39:00 +0000 |
| commit | a6eb9d56b6b4c1c83fea90657a84d5f8a38b74a1 (patch) | |
| tree | f0bd0f96d867c03d5c0fc1abf05f6b45b2ed9bfd | |
| parent | dd678c5e9cab8a8021d6eea40f059fe0fdbdb340 (diff) | |
| parent | 0665ceb1ef95816f405909d14aacad17d013eef2 (diff) | |
| download | perlweeklychallenge-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.pl | 10 | ||||
| -rw-r--r-- | challenge-103/lance-wicks/perl/lib/Zodiac.pm | 67 | ||||
| -rw-r--r-- | challenge-103/lance-wicks/perl/t/00-zodiac.t | 9 |
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; |
