aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-241/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-241/arne-sommer/raku/arithmetic-triplets29
-rwxr-xr-xchallenge-241/arne-sommer/raku/ch-1.raku29
-rwxr-xr-xchallenge-241/arne-sommer/raku/ch-2.raku33
-rwxr-xr-xchallenge-241/arne-sommer/raku/prime-order33
5 files changed, 125 insertions, 0 deletions
diff --git a/challenge-241/arne-sommer/blog.txt b/challenge-241/arne-sommer/blog.txt
new file mode 100644
index 0000000000..e134c67cdc
--- /dev/null
+++ b/challenge-241/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/arithmetic-prime.html
diff --git a/challenge-241/arne-sommer/raku/arithmetic-triplets b/challenge-241/arne-sommer/raku/arithmetic-triplets
new file mode 100755
index 0000000000..9f4d5056fc
--- /dev/null
+++ b/challenge-241/arne-sommer/raku/arithmetic-triplets
@@ -0,0 +1,29 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($diff where $diff ~~ UInt && $diff > 0,
+ *@nums where @nums.elems > 2 && all(@nums) ~~ Int && ( [<] @nums ),
+ :v(:$verbose));
+
+my $end = @nums.end;
+my $triplets = 0;
+
+for 0 .. $end -2 -> $i
+{
+ for $i+1 .. $end -1 -> $j
+ {
+ for $j+1 .. $end -> $k
+ {
+ if $diff == @nums[$j] - @nums[$i] == @nums[$k] - @nums[$j]
+ {
+ $triplets++;
+ say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k] [triplet]" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k]";
+ }
+ }
+ }
+}
+
+say $triplets;
diff --git a/challenge-241/arne-sommer/raku/ch-1.raku b/challenge-241/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..9f4d5056fc
--- /dev/null
+++ b/challenge-241/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,29 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($diff where $diff ~~ UInt && $diff > 0,
+ *@nums where @nums.elems > 2 && all(@nums) ~~ Int && ( [<] @nums ),
+ :v(:$verbose));
+
+my $end = @nums.end;
+my $triplets = 0;
+
+for 0 .. $end -2 -> $i
+{
+ for $i+1 .. $end -1 -> $j
+ {
+ for $j+1 .. $end -> $k
+ {
+ if $diff == @nums[$j] - @nums[$i] == @nums[$k] - @nums[$j]
+ {
+ $triplets++;
+ say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k] [triplet]" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ":Indices: $i,$j,$k -> values: @nums[$i],@nums[$j],@nums[$k]";
+ }
+ }
+ }
+}
+
+say $triplets;
diff --git a/challenge-241/arne-sommer/raku/ch-2.raku b/challenge-241/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..5c742c8030
--- /dev/null
+++ b/challenge-241/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems == @int.unique.elems > 2, :v(:$verbose));
+
+my %factor-count;
+
+for @int -> $int
+{
+ my @factors = factors($int);
+ %factor-count{$int} = @factors.elems;
+ say ":Int $int -> factors: { @factors.join(",") } -> count: { @factors.elems }" if $verbose;
+}
+
+say @int.sort({ %factor-count{$^a} <=> %factor-count{$^b} || $^b <=> $^a });
+
+sub factors ($number is copy)
+{
+ return (1) if $number == 1;
+ return ($number) if $number.is-prime;
+
+ my @factors;
+
+ for (2 .. $number div 2).grep( *.is-prime) -> $candidate
+ {
+ while $number %% $candidate
+ {
+ @factors.push: $candidate;
+ $number /= $candidate;
+ }
+ }
+
+ return @factors;
+}
diff --git a/challenge-241/arne-sommer/raku/prime-order b/challenge-241/arne-sommer/raku/prime-order
new file mode 100755
index 0000000000..5c742c8030
--- /dev/null
+++ b/challenge-241/arne-sommer/raku/prime-order
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems == @int.unique.elems > 2, :v(:$verbose));
+
+my %factor-count;
+
+for @int -> $int
+{
+ my @factors = factors($int);
+ %factor-count{$int} = @factors.elems;
+ say ":Int $int -> factors: { @factors.join(",") } -> count: { @factors.elems }" if $verbose;
+}
+
+say @int.sort({ %factor-count{$^a} <=> %factor-count{$^b} || $^b <=> $^a });
+
+sub factors ($number is copy)
+{
+ return (1) if $number == 1;
+ return ($number) if $number.is-prime;
+
+ my @factors;
+
+ for (2 .. $number div 2).grep( *.is-prime) -> $candidate
+ {
+ while $number %% $candidate
+ {
+ @factors.push: $candidate;
+ $number /= $candidate;
+ }
+ }
+
+ return @factors;
+}