From 753b5718d1347ac0342e0c4b0e28f7e00fb9fb06 Mon Sep 17 00:00:00 2001 From: Ben Davies Date: Mon, 4 Oct 2021 18:58:00 -0300 Subject: Add Ben Davies' Raku solutions for challenge 133 --- challenge-133/ben-davies/raku/ch-1.raku | 4 ++++ challenge-133/ben-davies/raku/ch-2.raku | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 challenge-133/ben-davies/raku/ch-1.raku create mode 100644 challenge-133/ben-davies/raku/ch-2.raku diff --git a/challenge-133/ben-davies/raku/ch-1.raku b/challenge-133/ben-davies/raku/ch-1.raku new file mode 100644 index 0000000000..98fd70d0ee --- /dev/null +++ b/challenge-133/ben-davies/raku/ch-1.raku @@ -0,0 +1,4 @@ +use v6; +unit sub MAIN(Int:D $n where * > 0) { + say (1..$n).first({ $^x == $n div $^x }); +} diff --git a/challenge-133/ben-davies/raku/ch-2.raku b/challenge-133/ben-davies/raku/ch-2.raku new file mode 100644 index 0000000000..ba862a20e4 --- /dev/null +++ b/challenge-133/ben-davies/raku/ch-2.raku @@ -0,0 +1,13 @@ +use v6; +unit sub MAIN() { + .say for (1..*).hyper.grep(*.&is-smith-number: 10).head(10); +} +sub is-smith-number(Int:D $x, Int:D $base) { + not $x.is-prime and $x.&digits($base).sum == $x.&prime-factors».&digits($base).flat.sum +} +sub digits(Int:D $x, Int:D $base) { + $x.polymod($base xx $x.log: $base).reverse +} +sub prime-factors(Int:D $x is copy) { + gather $x div= take (2..$x).grep(*.is-prime).first($x %% *) while $x > 1 +} -- cgit