aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-138/mark-anderson/raku/ch-1.raku17
-rw-r--r--challenge-138/mark-anderson/raku/ch-2.raku24
2 files changed, 41 insertions, 0 deletions
diff --git a/challenge-138/mark-anderson/raku/ch-1.raku b/challenge-138/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..2580a09cdd
--- /dev/null
+++ b/challenge-138/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/env raku
+
+say workdays(2021);
+say workdays(2020);
+
+sub workdays($year)
+{
+ my $dt = Date.new($year, 1, 1);
+ my $days = $dt.is-leap-year ?? 366 !! 365;
+
+ for 1..$days
+ {
+ state $bd++ if $dt.day-of-week ~~ 1..5;
+ $dt .= later(:1days);
+ LAST { return $bd }
+ }
+}
diff --git a/challenge-138/mark-anderson/raku/ch-2.raku b/challenge-138/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..0eced882d6
--- /dev/null
+++ b/challenge-138/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,24 @@
+#!/usr/bin/env raku
+
+say split-number(81);
+say split-number(9801);
+say split-number(36);
+
+sub split-number($n)
+{
+ for terms($n.chars)
+ {
+ my @a = $n.comb.rotor($_);
+ next if first { .elems > 1 and .head == 0 }, @a;
+ return 1 if @a>>.join.sum == $n.sqrt;
+ }
+
+ return 0;
+}
+
+sub terms($u)
+{
+ map {
+ ((.fmt: '%0' ~ $u ~ 'b') ~~ m:g/(.)[$0+]?/).map(*.chars)
+ }, 1..2**($u-1)-1;
+}