diff options
| -rwxr-xr-x | challenge-133/feng-chang/raku/ch-1.raku | 17 | ||||
| -rwxr-xr-x | challenge-133/feng-chang/raku/ch-2.raku | 28 |
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-133/feng-chang/raku/ch-1.raku b/challenge-133/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..1322a40a06 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-1.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +my method sqrt(UInt:D \N: --> UInt:D) { + my UInt $m; + my UInt $n = N; + + repeat { + $m = $n; + $n = ($m + N div $m) div 2; + } while $n < $m; + + $m +} + +sub MAIN(UInt:D \N where * > 0) { + put N.&sqrt; +} diff --git a/challenge-133/feng-chang/raku/ch-2.raku b/challenge-133/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..0f63b31841 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/bin/env raku + +sub facts(UInt:D \N where * > 1 --> Hash:D) { + my Int $m = N; + my Hash $F; + + for (^∞).grep: *.is-prime -> $p { + while ($m %% $p) { + ++$F{$p}; + $m div= $p; + } + + last if $m < $p * $p; + + LAST { ++$F{$m} if $m > 1 } + } + + $F +} + +sub is-smith-number(UInt:D \N --> Bool:D) { + return False if N.is-prime; + + my Hash $F = facts(N); + N.comb.sum == $F.keys.map({ $_.comb.sum * $F{$_} }).sum +} + +put (2..∞).grep({ is-smith-number($_) })[^10]; |
