aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-138/mark-anderson/raku/ch-1.raku26
-rw-r--r--challenge-138/mark-anderson/raku/ch-2.raku24
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;
}