aboutsummaryrefslogtreecommitdiff
path: root/challenge-133
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-11-24 01:07:43 +0000
committerGitHub <noreply@github.com>2021-11-24 01:07:43 +0000
commit6c5bd1dacec7f4db4e549d2c9d21cf2e07f82b66 (patch)
tree781f44ab55861383deacbd68ec2a43a87d1d0fb9 /challenge-133
parent7f21ae7de25b5f174cd59ff5ddc2c88e6c3e3484 (diff)
parent3601ca3aa16b14a9bd81294925e293a12d4baf98 (diff)
downloadperlweeklychallenge-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-xchallenge-133/feng-chang/raku/ch-1.raku17
-rwxr-xr-xchallenge-133/feng-chang/raku/ch-2.raku28
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];