aboutsummaryrefslogtreecommitdiff
path: root/challenge-013
diff options
context:
space:
mode:
author冯昶 <fengchang@novel-supertv.com>2019-06-27 00:10:45 +0800
committer冯昶 <fengchang@novel-supertv.com>2019-06-27 00:10:45 +0800
commit365a21e5a71bd4db362173a597b0d970e6907ef8 (patch)
tree0407ffcecf4eba25e271f68a0aa2bba53f806a09 /challenge-013
parentb8d4ba46cfd21a36c9939ea950666141888a258b (diff)
downloadperlweeklychallenge-club-365a21e5a71bd4db362173a597b0d970e6907ef8.tar.gz
perlweeklychallenge-club-365a21e5a71bd4db362173a597b0d970e6907ef8.tar.bz2
perlweeklychallenge-club-365a21e5a71bd4db362173a597b0d970e6907ef8.zip
challeng 014
Diffstat (limited to 'challenge-013')
-rwxr-xr-xchallenge-013/feng-chang/perl5/ch-1.pl24
-rwxr-xr-xchallenge-013/feng-chang/perl5/ch-2.pl33
2 files changed, 57 insertions, 0 deletions
diff --git a/challenge-013/feng-chang/perl5/ch-1.pl b/challenge-013/feng-chang/perl5/ch-1.pl
new file mode 100755
index 0000000000..1f2c604bc2
--- /dev/null
+++ b/challenge-013/feng-chang/perl5/ch-1.pl
@@ -0,0 +1,24 @@
+#!/bin/env perl
+
+use Modern::Perl;
+use Date::Manip;
+
+sub is_leap_year {
+ my $year = shift;
+
+ return 1 if $year % 400 == 0;
+ return 0 if $year % 100 == 0;
+ return 1 if $year % 4 == 0;
+ return 0;
+}
+
+exit if @ARGV < 1;
+my $year = $ARGV[0];
+
+my @last_days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
+$last_days[1] = 29 if is_leap_year($year);
+
+for my $month (1..12) {
+ my $d = ParseDate("$year-$month-". $last_days[$month - 1]);
+ say UnixDate(DateCalc($d, sprintf('- %d days', (UnixDate($d, '%w') - 5) % 7)), '%Y/%m/%d');
+}
diff --git a/challenge-013/feng-chang/perl5/ch-2.pl b/challenge-013/feng-chang/perl5/ch-2.pl
new file mode 100755
index 0000000000..27b72c67ce
--- /dev/null
+++ b/challenge-013/feng-chang/perl5/ch-2.pl
@@ -0,0 +1,33 @@
+#!/bin/env perl
+
+use Modern::Perl;
+
+my @F = (1);
+my @M = (0);
+
+sub F {
+ my $n = int(shift);
+ exit if $n < 0;
+
+ return $F[$n] if defined $F[$n];
+
+ $F[$n] = $n - M(F($n - 1));
+}
+
+sub M {
+ my $n = int(shift);
+ exit if $n < 0;
+
+ return $M[$n] if defined $M[$n];
+
+ $M[$n] = $n - F(M($n - 1));
+}
+
+exit unless defined $ARGV[0];
+my $n = $ARGV[0];
+
+print(F($_), ' ') for 0 .. $n - 1;
+say '';
+
+print(M($_), ' ') for 0 .. $n - 1;
+say '';