aboutsummaryrefslogtreecommitdiff
path: root/challenge-041
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-01 00:27:09 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-01-01 00:27:09 +0000
commit3907c2e9b9b63acaa31122edd2c3b83a32227067 (patch)
tree5d3dfe2c83c49a22b41ad43ee0f5c2598c79ff60 /challenge-041
parent5fbf0805a1e040ab5c97538389ab40d88025bec5 (diff)
downloadperlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.tar.gz
perlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.tar.bz2
perlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.zip
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-041')
-rw-r--r--challenge-041/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-041/arne-sommer/perl6/attractive-numbers36
-rwxr-xr-xchallenge-041/arne-sommer/perl6/ch-1.p636
-rwxr-xr-xchallenge-041/arne-sommer/perl6/ch-2.p68
-rwxr-xr-xchallenge-041/arne-sommer/perl6/divisors33
-rwxr-xr-xchallenge-041/arne-sommer/perl6/leonardo8
6 files changed, 122 insertions, 0 deletions
diff --git a/challenge-041/arne-sommer/blog.txt b/challenge-041/arne-sommer/blog.txt
new file mode 100644
index 0000000000..72c65bb026
--- /dev/null
+++ b/challenge-041/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/numbers.html
diff --git a/challenge-041/arne-sommer/perl6/attractive-numbers b/challenge-041/arne-sommer/perl6/attractive-numbers
new file mode 100755
index 0000000000..278d5bc263
--- /dev/null
+++ b/challenge-041/arne-sommer/perl6/attractive-numbers
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit = 50, :$verbose);
+
+for 1 .. $limit -> $current
+{
+ my @divisors = divisors($current);
+ my $elems = @divisors.elems;
+ say ": $current: Divisors: { divisors($current) } Elements: $elems" if $verbose;
+ say "$current is an attractive number (with divisors: @divisors[])" if $elems.is-prime;
+}
+
+sub divisors (Int $number is copy)
+{
+ return (1) if $number == 1;
+ return ($number) if $number.is-prime;
+
+ my @divisors;
+
+ for 2 .. ($number -1) -> $candidate
+ {
+ next unless $candidate.is-prime;
+
+ while ($number %% $candidate)
+ {
+ @divisors.push: $candidate;
+ $number div= $candidate;
+ }
+ if $number.is-prime
+ {
+ @divisors.push: $number;
+ last;
+ }
+ }
+ return @divisors;
+}
diff --git a/challenge-041/arne-sommer/perl6/ch-1.p6 b/challenge-041/arne-sommer/perl6/ch-1.p6
new file mode 100755
index 0000000000..278d5bc263
--- /dev/null
+++ b/challenge-041/arne-sommer/perl6/ch-1.p6
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit = 50, :$verbose);
+
+for 1 .. $limit -> $current
+{
+ my @divisors = divisors($current);
+ my $elems = @divisors.elems;
+ say ": $current: Divisors: { divisors($current) } Elements: $elems" if $verbose;
+ say "$current is an attractive number (with divisors: @divisors[])" if $elems.is-prime;
+}
+
+sub divisors (Int $number is copy)
+{
+ return (1) if $number == 1;
+ return ($number) if $number.is-prime;
+
+ my @divisors;
+
+ for 2 .. ($number -1) -> $candidate
+ {
+ next unless $candidate.is-prime;
+
+ while ($number %% $candidate)
+ {
+ @divisors.push: $candidate;
+ $number div= $candidate;
+ }
+ if $number.is-prime
+ {
+ @divisors.push: $number;
+ last;
+ }
+ }
+ return @divisors;
+}
diff --git a/challenge-041/arne-sommer/perl6/ch-2.p6 b/challenge-041/arne-sommer/perl6/ch-2.p6
new file mode 100755
index 0000000000..13bd98e06b
--- /dev/null
+++ b/challenge-041/arne-sommer/perl6/ch-2.p6
@@ -0,0 +1,8 @@
+#! /usr/bin/env raku
+
+my $leonardo := (1, 1, { $^a + $^b +1 } ... Inf);
+
+unit sub MAIN ($limit = 20);
+
+say "$_: $leonardo[$_]" for ^$limit;
+
diff --git a/challenge-041/arne-sommer/perl6/divisors b/challenge-041/arne-sommer/perl6/divisors
new file mode 100755
index 0000000000..e0c3e7fb9d
--- /dev/null
+++ b/challenge-041/arne-sommer/perl6/divisors
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit = 50);
+
+for 1 .. $limit -> $current
+{
+ say "$current: with divisors: { divisors($current) }";
+}
+
+sub divisors (Int $number is copy)
+{
+ return (1) if $number == 1;
+ return ($number) if $number.is-prime;
+
+ my @divisors;
+
+ for 2 .. ($number -1) -> $candidate
+ {
+ next unless $candidate.is-prime;
+
+ while ($number %% $candidate)
+ {
+ @divisors.push: $candidate;
+ $number div= $candidate;
+ }
+ if $number.is-prime
+ {
+ @divisors.push: $number;
+ last;
+ }
+ }
+ return @divisors;
+}
diff --git a/challenge-041/arne-sommer/perl6/leonardo b/challenge-041/arne-sommer/perl6/leonardo
new file mode 100755
index 0000000000..13bd98e06b
--- /dev/null
+++ b/challenge-041/arne-sommer/perl6/leonardo
@@ -0,0 +1,8 @@
+#! /usr/bin/env raku
+
+my $leonardo := (1, 1, { $^a + $^b +1 } ... Inf);
+
+unit sub MAIN ($limit = 20);
+
+say "$_: $leonardo[$_]" for ^$limit;
+