aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2023-07-24 13:53:02 +0000
committerMark <53903062+andemark@users.noreply.github.com>2023-07-24 13:53:02 +0000
commite2ffd2e9cd047508a245b5b6ad8caf984b0e824a (patch)
treed871076d727b88fc560f8513eeb04915e9bb7e84
parent9b898557f361fa740f57772a6267a043703da2f8 (diff)
downloadperlweeklychallenge-club-e2ffd2e9cd047508a245b5b6ad8caf984b0e824a.tar.gz
perlweeklychallenge-club-e2ffd2e9cd047508a245b5b6ad8caf984b0e824a.tar.bz2
perlweeklychallenge-club-e2ffd2e9cd047508a245b5b6ad8caf984b0e824a.zip
Challenge 227 Solutions (Raku)
-rw-r--r--challenge-227/mark-anderson/raku/ch-1.raku43
1 files changed, 22 insertions, 21 deletions
diff --git a/challenge-227/mark-anderson/raku/ch-1.raku b/challenge-227/mark-anderson/raku/ch-1.raku
index a9b05ce374..ffd28592fc 100644
--- a/challenge-227/mark-anderson/raku/ch-1.raku
+++ b/challenge-227/mark-anderson/raku/ch-1.raku
@@ -11,9 +11,8 @@ is friday-the-thirteenths(9999), 1;
for 1753..9999 -> $year
{
my $d = Date.new(:$year);
- my $dow = $d.day-of-week;
my @d = map { $d.later(:month($_)) }, ^12;
- say .fmt("%-15s") given $dow, +$d.is-leap-year, +@d.grep(*.day-of-week == 7)
+ say .fmt("%-15s") given $d.day-of-week, +$d.is-leap-year, +@d.grep(*.day-of-week == 7)
}
I used the program above (piped through sort -u) to create the chart below.
@@ -43,8 +42,27 @@ Day Of Week Leap Year Fri 13ths
7 1 3
--------------------------------------
-It looks like the sequence repeats every 400 years so this
-program should also work.
+That chart can be translated into the following program.
+
+sub friday-the-thirteenths($year where * ~~ 1753..9999)
+{
+ my $d = Date.new(:$year);
+
+ given $d.day-of-week
+ {
+ when 1 { 2 }
+ when 2 { $d.is-leap-year ?? 1 !! 2 }
+ when 3 { $d.is-leap-year ?? 2 !! 1 }
+ when 4 { $d.is-leap-year ?? 2 !! 3 }
+ when 7 { $d.is-leap-year ?? 3 !! 2 }
+ default { 1 }
+ }
+}
+
+But it looks like the sequence repeats every 400 years
+so this can be written without creating a Date object.
+
+=end com
sub friday-the-thirteenths($year where * ~~ 1753..9999)
{
@@ -72,20 +90,3 @@ sub friday-the-thirteenths($year where * ~~ 1753..9999)
3 1 1 3 2 1 3 1 2 2 2 2 1 1 2 2 1 3 1 1
>.Slip xx *
}
-
-=end com
-
-sub friday-the-thirteenths($year where * ~~ 1753..9999)
-{
- my $d = Date.new(:$year);
-
- given $d.day-of-week
- {
- when 1 { 2 }
- when 2 { $d.is-leap-year ?? 1 !! 2 }
- when 3 { $d.is-leap-year ?? 2 !! 1 }
- when 4 { $d.is-leap-year ?? 2 !! 3 }
- when 7 { $d.is-leap-year ?? 3 !! 2 }
- default { 1 }
- }
-}