aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE7-87-83 <fungcheokyin@gmail.com>2021-11-14 09:59:18 +0800
committerE7-87-83 <fungcheokyin@gmail.com>2021-11-14 09:59:18 +0800
commited0f1f1c40bc9491497b091456ad8f1c35c47805 (patch)
treeb813df851cbe5b2b633d93a8135507a4e81164b2
parentaae8862469f431e7c08dc668961cc7a4fe1e4593 (diff)
downloadperlweeklychallenge-club-ed0f1f1c40bc9491497b091456ad8f1c35c47805.tar.gz
perlweeklychallenge-club-ed0f1f1c40bc9491497b091456ad8f1c35c47805.tar.bz2
perlweeklychallenge-club-ed0f1f1c40bc9491497b091456ad8f1c35c47805.zip
tasks of calendar dates
-rw-r--r--challenge-132/cheok-yin-fung/perl/ch-1.pl26
-rw-r--r--challenge-137/cheok-yin-fung/perl/ch-1.pl23
-rw-r--r--challenge-138/cheok-yin-fung/BLOG.txt (renamed from challenge-138/BLOG.txt)0
-rw-r--r--challenge-138/cheok-yin-fung/java/WorkDays.java (renamed from challenge-138/java/WorkDays.java)0
-rw-r--r--challenge-138/cheok-yin-fung/julia/ch-1.jl (renamed from challenge-138/julia/ch-1.jl)4
-rw-r--r--challenge-138/cheok-yin-fung/perl/ch-1.pl (renamed from challenge-138/perl/ch-1.pl)62
-rw-r--r--challenge-138/cheok-yin-fung/perl/ch-2.pl (renamed from challenge-138/perl/ch-2.pl)0
7 files changed, 48 insertions, 67 deletions
diff --git a/challenge-132/cheok-yin-fung/perl/ch-1.pl b/challenge-132/cheok-yin-fung/perl/ch-1.pl
index 0247cfb9db..3dd745440b 100644
--- a/challenge-132/cheok-yin-fung/perl/ch-1.pl
+++ b/challenge-132/cheok-yin-fung/perl/ch-1.pl
@@ -2,22 +2,24 @@
# The Weekly Challenge 132
# Task 1 Mirror Dates
# Usage: ch-1.pl YYYY/MM/DD
+# modified: 14th Nov 2021
use v5.24.0;
use warnings;
-use Time::Local qw'timelocal timegm_nocheck';
+use Time::Local qw'timegm_nocheck';
+use Time::gmtime;
use Test::More tests => 3;
say mirror_str($ARGV[0]) if defined($ARGV[0]);
sub mirror {
my @arr_today = (22, 8, 2021); # Wed Sep 22 2021
- my $_today = timelocal(0, 0, 0, @arr_today);
+ my $_today = timegm_nocheck(0, 0, 0, @arr_today);
my @arr_birth = ($_[2], $_[1]-1, $_[0]);
- my $_birth = timelocal(0, 0, 0, @arr_birth);
+ my $_birth = timegm_nocheck(0, 0, 0, @arr_birth);
my $y1 = int (($_today - $_birth)/86400);
- my @d_senior = localtime timegm_nocheck 0, 0, 0, $arr_birth[0]-$y1, $arr_birth[1], $arr_birth[2];
- my @d_junior = localtime timegm_nocheck 0, 0, 0, $arr_today[0]+$y1, $arr_today[1], $arr_today[2];
- return [ [@d_senior], [@d_junior] ];
+ my $d_senior = gmtime timegm_nocheck 0, 0, 0, $arr_birth[0]-$y1, $arr_birth[1], $arr_birth[2];
+ my $d_junior = gmtime timegm_nocheck 0, 0, 0, $arr_today[0]+$y1, $arr_today[1], $arr_today[2];
+ return [ $d_senior, $d_junior ];
}
sub mirror_str {
@@ -27,13 +29,13 @@ sub mirror_str {
my ($d_s, $d_j) = mirror($byear, $bmonth, $bday)->@*;
return
- ($d_s->[5]+1900)."/"
- .($d_s->[4]<=8 ? 0 : "").($d_s->[4]+1)."/"
- .($d_s->[3]<10 ? 0 : "").($d_s->[3])
+ ($d_s->year()+1900)."/"
+ .($d_s->mon()<=8 ? 0 : "").($d_s->mon()+1)."/"
+ .($d_s->mday()<10 ? 0 : "").($d_s->mday())
.", "
- .($d_j->[5]+1900)."/"
- .($d_j->[4]<=8 ? 0 : "").($d_j->[4]+1)."/"
- .($d_j->[3]<10 ? 0 : "").($d_j->[3]);
+ .($d_j->year()+1900)."/"
+ .($d_j->mon()<=8 ? 0 : "").($d_j->mon()+1)."/"
+ .($d_j->mday()<10 ? 0 : "").($d_j->mday());
}
ok mirror_str("2021/09/18") eq "2021/09/14, 2021/09/26", "Example 1";
diff --git a/challenge-137/cheok-yin-fung/perl/ch-1.pl b/challenge-137/cheok-yin-fung/perl/ch-1.pl
index 7324e71726..b64b9cf27a 100644
--- a/challenge-137/cheok-yin-fung/perl/ch-1.pl
+++ b/challenge-137/cheok-yin-fung/perl/ch-1.pl
@@ -2,31 +2,26 @@
# The Weekly Challenge 137
# Task 1 Long Year
# Usage: ch-1.pl
+# modified: 14th Nov 2021
use v5.12.0;
use warnings;
+use Time::gmtime;
use Time::Local qw 'timegm_nocheck';
+
my $c = 0;
+
for my $y (1900..2100) {
- my %wday = (
- "Mon" => 1,
- "Tue" => 2,
- "Wed" => 3,
- "Thu" => 4,
- "Fri" => 5,
- "Sat" => 6,
- "Sun" => 7,
- );
- my $fourthJan = localtime timegm_nocheck 0, 0, 0, 4, 0, $y;
+ my $fourthJan = gmtime timegm_nocheck 0, 0, 0, 4, 0, $y;
- my $a = $wday{(split " ", $fourthJan)[0]};
+ my $a = $fourthJan->wday();
- my $yearLastDay = localtime timegm_nocheck 0, 0, 0, 31, 11, $y;
+ my $yearLastDay = gmtime timegm_nocheck 0, 0, 0, 31, 11, $y;
- my $b = $wday{(split " ", $yearLastDay)[0]};
+ my $b = $yearLastDay->wday();
- if ($a >= 4 && $b >= 4) {
+ if (($a >= 4 || $a == 0) && ($b >= 4 || $b == 0)) {
say $y;
$c++;
}
diff --git a/challenge-138/BLOG.txt b/challenge-138/cheok-yin-fung/BLOG.txt
index 470d7b5ebf..470d7b5ebf 100644
--- a/challenge-138/BLOG.txt
+++ b/challenge-138/cheok-yin-fung/BLOG.txt
diff --git a/challenge-138/java/WorkDays.java b/challenge-138/cheok-yin-fung/java/WorkDays.java
index 8d98f71adf..8d98f71adf 100644
--- a/challenge-138/java/WorkDays.java
+++ b/challenge-138/cheok-yin-fung/java/WorkDays.java
diff --git a/challenge-138/julia/ch-1.jl b/challenge-138/cheok-yin-fung/julia/ch-1.jl
index edd6a62b7f..488840e21b 100644
--- a/challenge-138/julia/ch-1.jl
+++ b/challenge-138/cheok-yin-fung/julia/ch-1.jl
@@ -32,8 +32,7 @@ function num_of_work_days(year)
LastMondayDec = SundayDec + Dates.Day(1);
- ans += 5*(dayofyear(LastMondayDec) - dayofyear(FirstMondayJan))/7
- # early version of CY's code: ans += 5*51
+ ans += 5*(Dates.dayofyear(LastMondayDec) - Dates.dayofyear(FirstMondayJan))/7
ans = convert(Int64, ans)
my_day = LastMondayDec
@@ -45,7 +44,6 @@ function num_of_work_days(year)
end
return ans
-
end
diff --git a/challenge-138/perl/ch-1.pl b/challenge-138/cheok-yin-fung/perl/ch-1.pl
index bb3e5fd167..e546af3bab 100644
--- a/challenge-138/perl/ch-1.pl
+++ b/challenge-138/cheok-yin-fung/perl/ch-1.pl
@@ -5,6 +5,7 @@
use v5.12.0;
use warnings;
use Time::Local qw 'timelocal_nocheck ';
+use Time::localtime;
use Time::HiRes qw 'time'; #for benchmarking
say count_work_days($ARGV[0]) if defined($ARGV[0]) && $ARGV[0] >= 1900;
@@ -17,7 +18,7 @@ benchmark();
sub testing {
for my $i (1975..2400) {
- say "big event in ", $i
+ say "big event in ", $i , "\n"
if simple_days_count($i) != count_work_days($i);
}
}
@@ -26,72 +27,51 @@ sub testing {
sub count_work_days {
my $y = $_[0];
- my %wday = (
- "Mon" => 1,
- "Tue" => 2,
- "Wed" => 3,
- "Thu" => 4,
- "Fri" => 5,
- "Sat" => 6,
- "Sun" => 0,
- );
my $_01Jan = localtime timelocal_nocheck 0, 0, 0, 1, 0, $y;
- my $d_01Jan= $wday{(split " ", $_01Jan)[0]};
-
+ my $d_01Jan = $_01Jan->wday();
my $diff = (1 - $d_01Jan) % 7;
- my @firstMonday = localtime timelocal_nocheck 0, 0, 0, 1+$diff, 0, $y;
+ my $firstMonday = timelocal_nocheck 0, 0, 0, 1+$diff, 0, $y;
my $_31Dec = localtime timelocal_nocheck 0, 0, 0, 31, 11, $y;
- my $d_31Dec = $wday{(split " ", $_31Dec)[0]};
+ my $d_31Dec = $_31Dec->wday();
my $back_diff = ($d_31Dec - 5) % 7;
- my @MondayAfterLastFriday
-# = $back_diff < 3
-# ? localtime timelocal_nocheck 0, 0, 0, 3-$back_diff, 0, $y+1
-# : localtime timelocal_nocheck 0, 0, 0, 31-$back_diff+3, 11, $y;
- = localtime timelocal_nocheck 0, 0, 0, 3-$back_diff, 0, $y+1;
+ my $MondayAfterLastFriday
+ = timelocal_nocheck 0, 0, 0, 3-$back_diff, 0, $y+1;
my $ans
= 5 * int (
- (timelocal_nocheck(@MondayAfterLastFriday)
- -timelocal_nocheck(@firstMonday))
+ ($MondayAfterLastFriday
+ -$firstMonday)
/86400/7
);
+
$ans += 6-$d_01Jan if $d_01Jan > 1;
$ans += $d_31Dec if $d_31Dec < 5;
return $ans;
-
}
+
+
sub simple_days_count {
- my %wday = (
- "Mon" => 1,
- "Tue" => 2,
- "Wed" => 3,
- "Thu" => 4,
- "Fri" => 5,
- "Sat" => 6,
- "Sun" => 0,
- );
my $y = $_[0];
my $day_var = timelocal_nocheck 0, 0, 0, 1, 0, $y;
- my $my_day = scalar localtime $day_var;
-
- my $d = $wday{(split " ", $my_day)[0]};
+ my $my_day = localtime $day_var;
+ my $d = $my_day->wday();
my $i = 0;
- while ((split " ", $my_day)[4] == $y) {
+ while ( ($my_day->year()+1900) == $y) {
$i++ if ($d >= 1 && $d <= 5);
$day_var = $day_var + 86400;
- $my_day = scalar localtime $day_var;
- $d = $wday{(split " ", $my_day)[0]};
+ $my_day = localtime $day_var;
+ $d = $my_day->wday();
}
return $i;
}
@@ -99,6 +79,7 @@ sub simple_days_count {
sub benchmark {
+
my $time_0 = time;
for my $i (1975..2400) {
simple_days_count($i);
@@ -115,8 +96,13 @@ sub benchmark {
say "simple_days_count: ", $time_1 - $time_0;
say "count_work_days: ", $time_2 - $time_1;
- # Output:
+ # Output, before using Time::localtime
# simple_days_count: 0.491244077682495
# count_work_days: 0.0362129211425781
+
+ # Output, after using Time::localtime
+ # simple_days_count: 1.16461586952209
+ # count_work_days: 0.0263321399688721
}
+
diff --git a/challenge-138/perl/ch-2.pl b/challenge-138/cheok-yin-fung/perl/ch-2.pl
index 3cf1916ec2..3cf1916ec2 100644
--- a/challenge-138/perl/ch-2.pl
+++ b/challenge-138/cheok-yin-fung/perl/ch-2.pl