diff options
| -rw-r--r-- | challenge-149/mark-anderson/raku/ch-1.raku | 15 | ||||
| -rw-r--r-- | challenge-149/mark-anderson/raku/ch-2.raku | 20 |
2 files changed, 35 insertions, 0 deletions
diff --git a/challenge-149/mark-anderson/raku/ch-1.raku b/challenge-149/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..7d595e5fe2 --- /dev/null +++ b/challenge-149/mark-anderson/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku + +use Test; + +is-deeply fibonacci-digit-sum(20), +(0, 1, 2, 3, 5, 8, 10, 11, 12, 14, 17, 20, 21, 23, 26, 30, 32, 35, 41, 44); + +is fibonacci-digit-sum(10000).tail, 98809; + +sub fibonacci-digit-sum(\n) +{ + my @fib = 0, 1, * + * ... 55; # good enough for numbers <= 9,999,991 + + (^Inf).grep({ .comb.sum (elem) @fib })[^n]; +} diff --git a/challenge-149/mark-anderson/raku/ch-2.raku b/challenge-149/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..4812afcd34 --- /dev/null +++ b/challenge-149/mark-anderson/raku/ch-2.raku @@ -0,0 +1,20 @@ +#!/usr/bin/env raku + +use Test; + +is largest-square(2), '1'; +is largest-square(4), '3201'; +is largest-square(10), '9814072356'; +is largest-square(12), 'B8750A649321'; + +sub largest-square(\base) +{ + my $d = (base.pred...0).map({.base(base)}).join + .parse-base(base).sqrt.floor; + + loop + { + my \b = ($d-- ** 2).base(base); + return b if b.comb.Bag.values.max == 1; + } +} |
