diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2023-07-24 13:53:02 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2023-07-24 13:53:02 +0000 |
| commit | e2ffd2e9cd047508a245b5b6ad8caf984b0e824a (patch) | |
| tree | d871076d727b88fc560f8513eeb04915e9bb7e84 | |
| parent | 9b898557f361fa740f57772a6267a043703da2f8 (diff) | |
| download | perlweeklychallenge-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.raku | 43 |
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 } - } -} |
