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:
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;
}