exercism-perl5

Repository for my Perl 5 Exercism exercises
git clone git://git.samirparikh.com/exercism-perl5
Log | Files | Refs | README

commit 717504e5f330bee398f3f59a63a82db13eaab49f
parent 995026f8d3c4d98dc17517381435f598e1b50e65
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Wed, 27 Apr 2022 18:18:51 +0000

get all tests to pass

Diffstat:
Mmeetup/Meetup.pm | 37++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/meetup/Meetup.pm b/meetup/Meetup.pm @@ -4,7 +4,6 @@ use warnings; use Exporter qw<import>; our @EXPORT_OK = qw<meetup>; -#use Data::Dumper; use Date::Calc qw( Nth_Weekday_of_Month_Year Days_in_Month ); sub meetup { @@ -13,7 +12,7 @@ sub meetup { my %day_number; my %month_number; my %week_number; - @input{ qw( week day_of_week of month year ) } = split / /, $desc; #hash slice + @input{ qw( week day_of_week of month year ) } = split / /, $desc; @day_number{ qw( Monday Tuesday Wednesday Thursday Friday Saturday Sunday ) } = ( 1 .. 7 ); @@ -27,6 +26,7 @@ sub meetup { my $month_num = $month_number{ $input{ month } }; my $day_num = $day_number{ $input{ day_of_week } }; my $week_num = $week_number{ $input{ week } }; + # if we are asked to find the last day in the month if ( $input{ week } eq 'Last' ) { my $days_in_month = Days_in_Month( $input{ year }, $month_num ); @@ -44,20 +44,31 @@ sub meetup { # week 5. $week_num = $day + 14 > $days_in_month ? 4 : 5; } - #print Dumper \%input; -# print "$desc\n"; -# print "year = ", $input{ year }, "\n"; -# print "month number = ", $month_number{ $input{ month } }, "\n"; -# print "day number = ", $day_number{ $input{ day_of_week } }, "\n"; -# print "week number = ", $week_number{ $input{ week } }, "\n"; - #return undef; + + # find the "teenth" day + if ( $input{ week } eq 'Teenth' ) { + foreach my $possible_week ( 2 .. 4) { + my ($year, $month, $day) = + Nth_Weekday_of_Month_Year( + $input{ year }, + $month_num, + $day_num, + $possible_week + ); + if ( $day > 12 and $day < 20 ) { + $week_num = $possible_week; + last; + } + } + } + my ($year, $month, $day) = Nth_Weekday_of_Month_Year( $input{ year }, - $month_num, #$month_number{ $input{ month } }, - $day_num, #$day_number{ $input{ day_of_week } }, - $week_num #$week_number{ $input{ week } } - ) if $week_num < 6; #$week_number{ $input{ week } } < 6; + $month_num, + $day_num, + $week_num + ) if $week_num < 6; my $result = sprintf( "%04d-%02d-%02d", $year, $month, $day ); return $result; }