diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-06-19 11:31:11 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-06-19 11:31:11 +0100 |
| commit | 4f3deee0773ee5d5c2c3832278cf4bb0a33c7a57 (patch) | |
| tree | bc5788cb5b737acd7dcdfa8a61299c8070690ab0 /challenge-013 | |
| parent | 8dcfe60d2313bc33f22471d54143d878a850539a (diff) | |
| download | perlweeklychallenge-club-4f3deee0773ee5d5c2c3832278cf4bb0a33c7a57.tar.gz perlweeklychallenge-club-4f3deee0773ee5d5c2c3832278cf4bb0a33c7a57.tar.bz2 perlweeklychallenge-club-4f3deee0773ee5d5c2c3832278cf4bb0a33c7a57.zip | |
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-013')
| -rw-r--r-- | challenge-013/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl5/ch-1.pl | 19 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl5/ch-1a.pl | 26 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl5/ch-2.pl | 21 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl5/ch-2a.pl | 21 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl6/ch-1.p6 | 19 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl6/ch-2.p6 | 15 | ||||
| -rw-r--r-- | challenge-013/laurent-rosenfeld/perl6/ch-2a.p6 | 15 |
8 files changed, 137 insertions, 0 deletions
diff --git a/challenge-013/laurent-rosenfeld/blog.txt b/challenge-013/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..6aefa9f2cb --- /dev/null +++ b/challenge-013/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2019/06/perl-weekly-challenge-13-fridays-and-mutually-recursive-subroutines.html diff --git a/challenge-013/laurent-rosenfeld/perl5/ch-1.pl b/challenge-013/laurent-rosenfeld/perl5/ch-1.pl new file mode 100644 index 0000000000..a6dc05c549 --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl5/ch-1.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature "say"; +use Time::Local qw/timegm_nocheck/ ; + + +my $year = shift // 2019; +for my $month (0..11) { + my @last_friday; + for my $day (20..31) { + my $epoch = + timegm_nocheck(0, 0, 12, $day, $month, $year - 1900); + my @date_details = gmtime $epoch; + last if $date_details[3] != $day; + @last_friday = @date_details if $date_details[6] == 5; + } + printf "%d/%02d/%d\n", $year, $month + 1, $last_friday[3]; +} diff --git a/challenge-013/laurent-rosenfeld/perl5/ch-1a.pl b/challenge-013/laurent-rosenfeld/perl5/ch-1a.pl new file mode 100644 index 0000000000..e4795b3c6e --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl5/ch-1a.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature "say"; +use Time::Local; + +sub is_leap_year { + my $year = shift; + return $year % 4 == 0; # works for years between 1901 and 2099 +} + +my @month_lengths = qw/ 31 28 31 30 31 30 31 31 30 31 30 31/; +my $year = shift // 2019; + +for my $month (0..11) { + my $month_length = $month_lengths[$month]; + $month_length = 29 if $month == 1 + and is_leap_year $year; # Feb is 1 + my @last_friday; + for my $day (20..$month_length) { + my $epoch = timegm(0, 0, 12, $day, $month, $year - 1900); + my @date_details = gmtime $epoch; + @last_friday = @date_details if $date_details[6] == 5; + } + printf "%d/%02d/%d\n", $year, $month + 1, $last_friday[3]; +} diff --git a/challenge-013/laurent-rosenfeld/perl5/ch-2.pl b/challenge-013/laurent-rosenfeld/perl5/ch-2.pl new file mode 100644 index 0000000000..5b67ade8ed --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl5/ch-2.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature "say"; + +sub female { + my $n = shift; + return 1 if $n == 0; # base case + return $n - male (female ($n - 1)); +} +sub male { + my $n = shift; + return 0 if $n == 0; #base case + return $n - female (male ($n - 1)); +} +say "Female sequence: "; +printf "%d ", female $_ for 0..30; +say ""; +say "Male sequence:"; +printf "%d ", male $_ for 0..30; +say ""; diff --git a/challenge-013/laurent-rosenfeld/perl5/ch-2a.pl b/challenge-013/laurent-rosenfeld/perl5/ch-2a.pl new file mode 100644 index 0000000000..a54ca1c19d --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl5/ch-2a.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature "say"; +no warnings "recursion"; +use Memoize; + +memoize('female', 'male'); + +sub female { + my $n = shift; + return 1 if $n == 0; # base case + return $n - male (female ($n - 1)); +} +sub male { + my $n = shift; + return 0 if $n == 0; #base case + return $n - female (male ($n - 1)); +} +say "Female sequence: "; +say female shift; diff --git a/challenge-013/laurent-rosenfeld/perl6/ch-1.p6 b/challenge-013/laurent-rosenfeld/perl6/ch-1.p6 new file mode 100644 index 0000000000..82ed14d21a --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl6/ch-1.p6 @@ -0,0 +1,19 @@ +use v6; + +sub MAIN (UInt $year = 2019) { + my $year-length = + DateTime.new(:year($year)).is-leap-year ?? 366 !! 365; + my $day = Date.new("$year-01-01"); + my $month = 1; + my $last-friday; + for 1..$year-length { + $day = $day.succ; + next unless $day.day-of-week == 5; + if $day.month != $month { + $month = $day.month; + say $last-friday; + } + $last-friday = $day; + } + say $last-friday; +} diff --git a/challenge-013/laurent-rosenfeld/perl6/ch-2.p6 b/challenge-013/laurent-rosenfeld/perl6/ch-2.p6 new file mode 100644 index 0000000000..9a107feeec --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl6/ch-2.p6 @@ -0,0 +1,15 @@ +use v6; + +sub female (UInt:D $n) { + return 1 if $n == 0; # base case + return $n - male (female ($n - 1)); +} +sub male (UInt:D $n) { + return 0 if $n == 0; #base case + return $n - female (male ($n - 1)); +} +say "Female sequence:"; +printf "%d ", female $_ for 0..30; +say ""; +say "Male sequence:"; +printf "%d ", male $_ for 0..30; diff --git a/challenge-013/laurent-rosenfeld/perl6/ch-2a.p6 b/challenge-013/laurent-rosenfeld/perl6/ch-2a.p6 new file mode 100644 index 0000000000..3bebf1379b --- /dev/null +++ b/challenge-013/laurent-rosenfeld/perl6/ch-2a.p6 @@ -0,0 +1,15 @@ +use v6; + +multi sub female (0) { 1; } # base case +multi sub female (UInt:D $n) { + return $n - male (female ($n - 1)); +} +multi sub male (0) { 0; } # base case +multi sub male (UInt:D $n) { + return $n - female (male ($n - 1)); +} +say "Female sequence:"; +printf "%d ", female $_ for 0..30; +say ""; +say "Male sequence:"; +printf "%d ", male $_ for 0..30; |
