aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-03-18 22:11:37 +0000
committerGitHub <noreply@github.com>2022-03-18 22:11:37 +0000
commit721d5d14bb05d597b0e3595ac6dc0253631a822e (patch)
treec9bc5d88176be17f6737948c66f69cd45425667e
parent3efb2f796efcaa664b1248fc67f8d40cc3d547c2 (diff)
parent34a0ad3f74be41ba6730acded8a6a984b9daee97 (diff)
downloadperlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.tar.gz
perlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.tar.bz2
perlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.zip
Merge pull request #5794 from arnesom/branch-for-challenge-156
Arne Sommer
-rw-r--r--challenge-156/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-156/arne-sommer/raku/ch-1.raku7
-rwxr-xr-xchallenge-156/arne-sommer/raku/ch-2.raku23
-rwxr-xr-xchallenge-156/arne-sommer/raku/pernicious-numbers7
-rwxr-xr-xchallenge-156/arne-sommer/raku/unpernicious-numbers7
-rwxr-xr-xchallenge-156/arne-sommer/raku/weird-number23
-rwxr-xr-xchallenge-156/arne-sommer/raku/weird-number-exit23
-rwxr-xr-xchallenge-156/arne-sommer/raku/weird-number-exits38
-rwxr-xr-xchallenge-156/arne-sommer/raku/weird-number-seq32
9 files changed, 161 insertions, 0 deletions
diff --git a/challenge-156/arne-sommer/blog.txt b/challenge-156/arne-sommer/blog.txt
new file mode 100644
index 0000000000..bc8920923c
--- /dev/null
+++ b/challenge-156/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/weirdly-pernicious.html
diff --git a/challenge-156/arne-sommer/raku/ch-1.raku b/challenge-156/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..727105e251
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $length where $length > 0 = 10);
+
+my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime });
+
+$pn.head($length).join(", ").say;
diff --git a/challenge-156/arne-sommer/raku/ch-2.raku b/challenge-156/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..e63cee9fab
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0);
+
+my @proper-divisors = divisors($n, :not-self);
+
+say @proper-divisors.sum <= $n
+ ?? 0
+ !! + ! so any(@proper-divisors.combinations>>.sum) == $n;
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ return @divisors;
+}
diff --git a/challenge-156/arne-sommer/raku/pernicious-numbers b/challenge-156/arne-sommer/raku/pernicious-numbers
new file mode 100755
index 0000000000..727105e251
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/pernicious-numbers
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $length where $length > 0 = 10);
+
+my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime });
+
+$pn.head($length).join(", ").say;
diff --git a/challenge-156/arne-sommer/raku/unpernicious-numbers b/challenge-156/arne-sommer/raku/unpernicious-numbers
new file mode 100755
index 0000000000..b7b6510869
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/unpernicious-numbers
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $length where $length > 0 = 10);
+
+my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime.not });
+
+$pn.head($length).join(", ").say;
diff --git a/challenge-156/arne-sommer/raku/weird-number b/challenge-156/arne-sommer/raku/weird-number
new file mode 100755
index 0000000000..e63cee9fab
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/weird-number
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0);
+
+my @proper-divisors = divisors($n, :not-self);
+
+say @proper-divisors.sum <= $n
+ ?? 0
+ !! + ! so any(@proper-divisors.combinations>>.sum) == $n;
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ return @divisors;
+}
diff --git a/challenge-156/arne-sommer/raku/weird-number-exit b/challenge-156/arne-sommer/raku/weird-number-exit
new file mode 100755
index 0000000000..6154d5ebef
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/weird-number-exit
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0);
+
+my @proper-divisors = divisors($n, :not-self);
+
+(say 0; exit) if @proper-divisors.sum <= $n;
+
+say + ! so any(@proper-divisors.combinations>>.sum) == $n;
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ return @divisors;
+}
diff --git a/challenge-156/arne-sommer/raku/weird-number-exits b/challenge-156/arne-sommer/raku/weird-number-exits
new file mode 100755
index 0000000000..213cac0207
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/weird-number-exits
@@ -0,0 +1,38 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0);
+
+my @proper-divisors = divisors($n, :not-self);
+
+if (@proper-divisors.sum > $n)
+{
+ for @proper-divisors.combinations -> @combination
+ {
+ if @combination.sum == $n
+ {
+ say 0;
+ exit;
+ }
+ }
+
+ say 1;
+ exit;
+}
+
+say 0;
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ # say ": $number has { @divisors.elems } divisors: { @divisors.join(", ") }" if $verbose;
+
+ return @divisors;
+}
diff --git a/challenge-156/arne-sommer/raku/weird-number-seq b/challenge-156/arne-sommer/raku/weird-number-seq
new file mode 100755
index 0000000000..bcae628529
--- /dev/null
+++ b/challenge-156/arne-sommer/raku/weird-number-seq
@@ -0,0 +1,32 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit where $limit > 0 = 10, :v(:$verbose));
+
+my $wns := (1..Inf).grep( *.&is-weird );
+
+say $wns.head($limit).join(", ");
+
+sub is-weird (Int $number)
+{
+ my @proper-divisors = divisors($number, :not-self);
+
+ return @proper-divisors.sum <= $number
+ ?? False
+ !! ! so any(@proper-divisors.combinations>>.sum) == $number;
+}
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+
+ say ": $number has divisors: { @divisors.join(", ") }" if $verbose;
+
+ return @divisors;
+}