diff options
| author | CY Fung <fungcheokyin@gmail.com> | 2022-07-27 22:57:34 +0800 |
|---|---|---|
| committer | CY Fung <fungcheokyin@gmail.com> | 2022-07-27 22:57:34 +0800 |
| commit | 80b8794991b3d7be4b3a761a93efa284f12180ad (patch) | |
| tree | 3f2d1f397594c44f6426c03f3c9bae3c93ac4aab | |
| parent | ac8babe1d15abbfd90a57765b47da04d42f1051f (diff) | |
| download | perlweeklychallenge-club-80b8794991b3d7be4b3a761a93efa284f12180ad.tar.gz perlweeklychallenge-club-80b8794991b3d7be4b3a761a93efa284f12180ad.tar.bz2 perlweeklychallenge-club-80b8794991b3d7be4b3a761a93efa284f12180ad.zip | |
Perl Solutions - Week 175
| -rw-r--r-- | challenge-175/cheok-yin-fung/perl/ch-1.pl | 52 | ||||
| -rw-r--r-- | challenge-175/cheok-yin-fung/perl/ch-2.pl | 19 |
2 files changed, 71 insertions, 0 deletions
diff --git a/challenge-175/cheok-yin-fung/perl/ch-1.pl b/challenge-175/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..ad5bdbb525 --- /dev/null +++ b/challenge-175/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,52 @@ +# The Weekly Challenge 175 +# Task 1 Last Sunday +use v5.30.0; +use Time::Local qw'timegm_nocheck'; +use Time::gmtime; + + +say join "\n", last_sun_year($ARGV[0] || 2022)->@*; + + +sub last_sun_month { + my ($m, $y)= @_; + my $n = gmtime timegm_nocheck 0, 0, 0, 1, $m+1, $y; + my $constant = $n->wday() == 0 ? 7 : $n->wday(); + return (gmtime timegm_nocheck 0, 0, 0, 1-$constant, $m+1, $y); +} + + + +sub date_str { + my $d_s = $_[0]; + return + ($d_s->year()+1900)."-" + .($d_s->mon()<=8 ? 0 : "").($d_s->mon()+1)."-" + .($d_s->mday()<10 ? 0 : "").($d_s->mday()) +} + + + +sub last_sun_year { + my $y = $_[0]-1900; + my @suns = map {last_sun_month($_, $y)} (0..10); + return [map {date_str $_} @suns, last_sun_month(-1, $y+1)]; +} + + +use Test::More tests => 1; +use Test::Deep; +cmp_deeply + last_sun_year(2022), + ["2022-01-30", + "2022-02-27", + "2022-03-27", + "2022-04-24", + "2022-05-29", + "2022-06-26", + "2022-07-31", + "2022-08-28", + "2022-09-25", + "2022-10-30", + "2022-11-27", + "2022-12-25"]; diff --git a/challenge-175/cheok-yin-fung/perl/ch-2.pl b/challenge-175/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..8096c138bf --- /dev/null +++ b/challenge-175/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,19 @@ +# The Weekly Challenge 175 +# Task 2 Perfect Totient Number +use v5.20.0; +use Math::Prime::Util qw/euler_phi/; + +my $p = 0; +for (my $n0 = 3; $n0 < 1_000_000_000; $n0 += 2) { + my $n = $n0; + my $sum = 0; + do { + $n = euler_phi($n); + $sum += $n; + } until ($sum > $n0 || $n == 1); + if ($sum == $n0) { + say $n0; + $p++; + } + last if $p >= ($ARGV[0] || 20); +} |
