diff options
| -rw-r--r-- | challenge-138/mark-anderson/raku/ch-1.raku | 26 | ||||
| -rw-r--r-- | challenge-138/mark-anderson/raku/ch-2.raku | 24 |
2 files changed, 32 insertions, 18 deletions
diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku index 192b2e7822..91c1424e51 100644 --- a/challenge-138/mark-anderson/raku/ch-1.raku +++ b/challenge-138/mark-anderson/raku/ch-1.raku @@ -1,17 +1,23 @@ #!/usr/bin/env raku -say workdays(2021); -say workdays(2020); +use Test; +plan 9; + +is workdays(2020), 262; +is workdays(2021), 261; +is workdays(2022), 260; +is workdays(2050), 260; +is workdays(2051), 260; +is workdays(2052), 262; +is workdays(2053), 261; +is workdays(2075), 261; +is workdays(2076), 262; sub workdays($year) { - my $dt = Date.new($year, 1, 1); - my $days = $dt.is-leap-year ?? 366 !! 365; + my $a := [ Nil, 261, 261, 261, 261, 261, 260, 260 ], + [ Nil, 262, 262, 262, 262, 261, 260, 261 ]; - for 1..$days - { - state $wd++ if $dt.day-of-week ~~ 1..5; - $dt .= later(:1days); - LAST { return $wd } - } + my $dt = Date.new($year, 1, 1); + $a[ +$dt.is-leap-year ][ $dt.day-of-week ]; } diff --git a/challenge-138/mark-anderson/raku/ch-2.raku b/challenge-138/mark-anderson/raku/ch-2.raku index 0eced882d6..9b43a7edb6 100644 --- a/challenge-138/mark-anderson/raku/ch-2.raku +++ b/challenge-138/mark-anderson/raku/ch-2.raku @@ -1,8 +1,17 @@ #!/usr/bin/env raku -say split-number(81); -say split-number(9801); -say split-number(36); +use Test; +plan 9; + +isnt split-number(36), 1; +is split-number(81), 1, '9 = 8 + 1'; +is split-number(100), 1, '10 = 10 + 0'; +is split-number(9801), 1, '99 = 98 + 0 + 1'; +is split-number(55225), 1, '235 = 5 + 5 + 225'; +is split-number(136161), 1, '369 = 1 + 361 + 6 + 1'; +is split-number(11329956), 1, '3366 = 11 + 3299 + 56'; +is split-number(57562569), 1, '7587 = 5 + 7562 + 5 + 6 + 9'; +is split-number(100000000), 1, '10000 = 10000 + 0 + 0 + 0 + 0'; sub split-number($n) { @@ -10,15 +19,14 @@ sub split-number($n) { my @a = $n.comb.rotor($_); next if first { .elems > 1 and .head == 0 }, @a; - return 1 if @a>>.join.sum == $n.sqrt; + return 1 if @a.map(*.join).sum == $n.sqrt; } return 0; } -sub terms($u) +sub terms($n) { - map { - ((.fmt: '%0' ~ $u ~ 'b') ~~ m:g/(.)[$0+]?/).map(*.chars) - }, 1..2**($u-1)-1; + map { ((.fmt: '%0' ~ $n ~ 'b') ~~ m:g/ (.) [$0+]? /).map(*.chars) }, + 1..2**($n-1)-1; } |
