aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2022-04-10 21:26:35 +0200
committerarnesom <arne@bbop.org>2022-04-10 21:26:35 +0200
commit5cfdbce58bb3acab34e145243883acfbac22edbf (patch)
treeaa7660ce7ce5ee30e935457e3e34d24a0289f163
parentb4302eda5b87a6c11c1c6bd7b0eecb45bd15f685 (diff)
downloadperlweeklychallenge-club-5cfdbce58bb3acab34e145243883acfbac22edbf.tar.gz
perlweeklychallenge-club-5cfdbce58bb3acab34e145243883acfbac22edbf.tar.bz2
perlweeklychallenge-club-5cfdbce58bb3acab34e145243883acfbac22edbf.zip
Arne Sommer
-rw-r--r--challenge-159/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-159/arne-sommer/raku/ch-1.raku22
-rwxr-xr-xchallenge-159/arne-sommer/raku/ch-2.raku39
-rwxr-xr-xchallenge-159/arne-sommer/raku/farey-sequence22
-rwxr-xr-xchallenge-159/arne-sommer/raku/moebius-number39
5 files changed, 123 insertions, 0 deletions
diff --git a/challenge-159/arne-sommer/blog.txt b/challenge-159/arne-sommer/blog.txt
new file mode 100644
index 0000000000..4742664056
--- /dev/null
+++ b/challenge-159/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/farey-moebius.html
diff --git a/challenge-159/arne-sommer/raku/ch-1.raku b/challenge-159/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..16f3d4dcca
--- /dev/null
+++ b/challenge-159/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0, :v(:$verbose));
+
+my @fs = (0/1, 1/1);
+
+for 1 .. $n -1 -> $numerator
+{
+ for $numerator +1 .. $n -> $denominator
+ {
+ @fs.push: $numerator/$denominator;
+ }
+}
+
+if $verbose
+{
+ say ":Unsorted: { @fs.join(", ") }";
+ say ":Unsorted x/y: { @fs.map( *.nude.join("/") ).join(", ") }";
+ say ":Sorted x/y: { @fs.sort.map( *.nude.join("/") ).join(", ") }";
+}
+
+@fs.sort.unique.map( *.nude.join("/") ).join(", ").say;
diff --git a/challenge-159/arne-sommer/raku/ch-2.raku b/challenge-159/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..78db0dcae1
--- /dev/null
+++ b/challenge-159/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0, :v(:$verbose));
+
+my @prime-factors = factors($n, :include-one);
+
+say ": Factor count: { @prime-factors.elems } (Factors: { @prime-factors.join(", ")})" if $verbose;
+
+if @prime-factors.repeated.elems
+{
+ say 0;
+}
+else
+{
+ say @prime-factors.elems %% 2 ?? -1 !! 1;
+}
+
+sub factors ($number is copy, :$include-one)
+{
+ return (1) if $number == 1;
+
+ if $number.is-prime
+ {
+ return :$include-one ?? (1, $number) !! ($number);
+ }
+
+ my @factors = $include-one ?? 1 !! ();
+
+ for (2 .. $number div 2).grep( *.is-prime ) -> $candidate
+ {
+ while $number %% $candidate
+ {
+ @factors.push: $candidate;
+ $number /= $candidate;
+ }
+ }
+
+ return @factors;
+}
diff --git a/challenge-159/arne-sommer/raku/farey-sequence b/challenge-159/arne-sommer/raku/farey-sequence
new file mode 100755
index 0000000000..16f3d4dcca
--- /dev/null
+++ b/challenge-159/arne-sommer/raku/farey-sequence
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0, :v(:$verbose));
+
+my @fs = (0/1, 1/1);
+
+for 1 .. $n -1 -> $numerator
+{
+ for $numerator +1 .. $n -> $denominator
+ {
+ @fs.push: $numerator/$denominator;
+ }
+}
+
+if $verbose
+{
+ say ":Unsorted: { @fs.join(", ") }";
+ say ":Unsorted x/y: { @fs.map( *.nude.join("/") ).join(", ") }";
+ say ":Sorted x/y: { @fs.sort.map( *.nude.join("/") ).join(", ") }";
+}
+
+@fs.sort.unique.map( *.nude.join("/") ).join(", ").say;
diff --git a/challenge-159/arne-sommer/raku/moebius-number b/challenge-159/arne-sommer/raku/moebius-number
new file mode 100755
index 0000000000..78db0dcae1
--- /dev/null
+++ b/challenge-159/arne-sommer/raku/moebius-number
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n where $n > 0, :v(:$verbose));
+
+my @prime-factors = factors($n, :include-one);
+
+say ": Factor count: { @prime-factors.elems } (Factors: { @prime-factors.join(", ")})" if $verbose;
+
+if @prime-factors.repeated.elems
+{
+ say 0;
+}
+else
+{
+ say @prime-factors.elems %% 2 ?? -1 !! 1;
+}
+
+sub factors ($number is copy, :$include-one)
+{
+ return (1) if $number == 1;
+
+ if $number.is-prime
+ {
+ return :$include-one ?? (1, $number) !! ($number);
+ }
+
+ my @factors = $include-one ?? 1 !! ();
+
+ for (2 .. $number div 2).grep( *.is-prime ) -> $candidate
+ {
+ while $number %% $candidate
+ {
+ @factors.push: $candidate;
+ $number /= $candidate;
+ }
+ }
+
+ return @factors;
+}