diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-11-24 01:07:43 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-24 01:07:43 +0000 |
| commit | 6c5bd1dacec7f4db4e549d2c9d21cf2e07f82b66 (patch) | |
| tree | 781f44ab55861383deacbd68ec2a43a87d1d0fb9 /challenge-133 | |
| parent | 7f21ae7de25b5f174cd59ff5ddc2c88e6c3e3484 (diff) | |
| parent | 3601ca3aa16b14a9bd81294925e293a12d4baf98 (diff) | |
| download | perlweeklychallenge-club-6c5bd1dacec7f4db4e549d2c9d21cf2e07f82b66.tar.gz perlweeklychallenge-club-6c5bd1dacec7f4db4e549d2c9d21cf2e07f82b66.tar.bz2 perlweeklychallenge-club-6c5bd1dacec7f4db4e549d2c9d21cf2e07f82b66.zip | |
Merge pull request #5265 from seaker/master
Challenge #140, Feng Chang's Raku solutions, and more
Diffstat (limited to 'challenge-133')
| -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]; |
