aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2021-11-09 21:38:19 +0000
committerMark <53903062+andemark@users.noreply.github.com>2021-11-09 21:38:19 +0000
commit7f84f0b1330ecf5338e117596ed155d6c2a513cd (patch)
tree72454b9c05014bd59aaf4cf2702921d3dbb5ae86
parent10e6a7aa2ac5c135eb1c6abb9c4409a9dc842b24 (diff)
downloadperlweeklychallenge-club-7f84f0b1330ecf5338e117596ed155d6c2a513cd.tar.gz
perlweeklychallenge-club-7f84f0b1330ecf5338e117596ed155d6c2a513cd.tar.bz2
perlweeklychallenge-club-7f84f0b1330ecf5338e117596ed155d6c2a513cd.zip
Challenge 138 Solutions (Raku)
-rw-r--r--challenge-138/mark-anderson/raku/ch-1.raku41
-rw-r--r--challenge-138/mark-anderson/raku/ch-2.raku24
2 files changed, 48 insertions, 17 deletions
diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku
index 192b2e7822..d5928ef653 100644
--- a/challenge-138/mark-anderson/raku/ch-1.raku
+++ b/challenge-138/mark-anderson/raku/ch-1.raku
@@ -1,17 +1,40 @@
#!/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 %h is Map = False => {
+ 6 => 260,
+ 7 => 260,
+ 1 => 261,
+ 2 => 261,
+ 3 => 261,
+ 4 => 261,
+ 5 => 261
+ },
+ True => {
+ 6 => 260,
+ 5 => 261,
+ 7 => 261,
+ 1 => 262,
+ 2 => 262,
+ 3 => 262,
+ 4 => 262
+ }
+
my $dt = Date.new($year, 1, 1);
- my $days = $dt.is-leap-year ?? 366 !! 365;
- for 1..$days
- {
- state $wd++ if $dt.day-of-week ~~ 1..5;
- $dt .= later(:1days);
- LAST { return $wd }
- }
+ %h{ $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;
}