aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-336/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-336/arne-sommer/raku/ch-1.raku50
-rwxr-xr-xchallenge-336/arne-sommer/raku/ch-2.raku22
-rwxr-xr-xchallenge-336/arne-sommer/raku/equal-group15
-rwxr-xr-xchallenge-336/arne-sommer/raku/equal-group-ordered50
-rwxr-xr-xchallenge-336/arne-sommer/raku/equal-group-prime28
-rwxr-xr-xchallenge-336/arne-sommer/raku/final-score22
7 files changed, 188 insertions, 0 deletions
diff --git a/challenge-336/arne-sommer/blog.txt b/challenge-336/arne-sommer/blog.txt
new file mode 100644
index 0000000000..aa55fe14e7
--- /dev/null
+++ b/challenge-336/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/equally-final.html \ No newline at end of file
diff --git a/challenge-336/arne-sommer/raku/ch-1.raku b/challenge-336/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..2ffee70865
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,50 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ :v(:$verbose));
+
+my @freq;
+my $curr = @ints[0];
+my $freq = 1;
+
+for @ints[1 .. Inf] -> $int
+{
+ if $int == $curr
+ {
+ $freq++;
+ }
+ else
+ {
+ @freq.push: $freq;
+ $curr = $int;
+ $freq = 1;
+ }
+}
+
+@freq.push: $freq;
+
+my $min = @freq.min;
+
+if $verbose
+{
+ say ": Frequency: { @freq.join(", ") }";
+ say ": Group size (min freq): $min";
+}
+
+for 2 .. $min -> $i
+{
+ next unless $i.is-prime;
+
+ if all(@freq) %% $i
+ {
+ if $verbose
+ {
+ say ": Group size (prime): $i";
+ say ": Grouped: { @ints>>.Int.rotor($i).raku }";
+ }
+ say 'true';
+ exit;
+ }
+}
+
+say 'false'; \ No newline at end of file
diff --git a/challenge-336/arne-sommer/raku/ch-2.raku b/challenge-336/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..02d5cebe5e
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@scores where @scores.elems > 0,
+ :v(:$verbose));
+
+my @processed;
+my $round = 1;
+
+for @scores -> $score
+{
+ given $score
+ {
+ when Int { @processed.push: $score; }
+ when '+' { @processed.push: @processed[*-1] + @processed[*-2]; }
+ when 'C' { @processed.pop; }
+ when 'D' { @processed.push: @processed[*-1] * 2; }
+ default { die "Illegal score $score"; }
+ }
+ say ": Round { $round++ }: Value:$score -> Scores: { @processed.join(",") }" if $verbose;
+}
+
+say @processed.sum; \ No newline at end of file
diff --git a/challenge-336/arne-sommer/raku/equal-group b/challenge-336/arne-sommer/raku/equal-group
new file mode 100755
index 0000000000..3ad608ae43
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/equal-group
@@ -0,0 +1,15 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ :v(:$verbose));
+
+my $bag = @ints>>.Int.Bag;
+my $min = $bag.values.min;
+
+if $verbose
+{
+ say ": Bag: { $bag.raku }";
+ say ": Group size (min freq): $min";
+}
+
+say so $min > 1 && all($bag.values) %% $min;
diff --git a/challenge-336/arne-sommer/raku/equal-group-ordered b/challenge-336/arne-sommer/raku/equal-group-ordered
new file mode 100755
index 0000000000..2ffee70865
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/equal-group-ordered
@@ -0,0 +1,50 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ :v(:$verbose));
+
+my @freq;
+my $curr = @ints[0];
+my $freq = 1;
+
+for @ints[1 .. Inf] -> $int
+{
+ if $int == $curr
+ {
+ $freq++;
+ }
+ else
+ {
+ @freq.push: $freq;
+ $curr = $int;
+ $freq = 1;
+ }
+}
+
+@freq.push: $freq;
+
+my $min = @freq.min;
+
+if $verbose
+{
+ say ": Frequency: { @freq.join(", ") }";
+ say ": Group size (min freq): $min";
+}
+
+for 2 .. $min -> $i
+{
+ next unless $i.is-prime;
+
+ if all(@freq) %% $i
+ {
+ if $verbose
+ {
+ say ": Group size (prime): $i";
+ say ": Grouped: { @ints>>.Int.rotor($i).raku }";
+ }
+ say 'true';
+ exit;
+ }
+}
+
+say 'false'; \ No newline at end of file
diff --git a/challenge-336/arne-sommer/raku/equal-group-prime b/challenge-336/arne-sommer/raku/equal-group-prime
new file mode 100755
index 0000000000..cdc74eef4c
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/equal-group-prime
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ :v(:$verbose));
+
+
+my $bag = @ints>>.Int.Bag;
+my $min = $bag.values.min;
+
+if $verbose
+{
+ say ": Bag: { $bag.raku }";
+ say ": Group size (min freq): $min";
+}
+
+for 2 .. $min -> $i
+{
+ next unless $i.is-prime;
+
+ if $i > 1 && all($bag.values) %% $i
+ {
+ say ": Group size (prime): $i";
+ say 'true';
+ exit;
+ }
+}
+
+say 'false'; \ No newline at end of file
diff --git a/challenge-336/arne-sommer/raku/final-score b/challenge-336/arne-sommer/raku/final-score
new file mode 100755
index 0000000000..02d5cebe5e
--- /dev/null
+++ b/challenge-336/arne-sommer/raku/final-score
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@scores where @scores.elems > 0,
+ :v(:$verbose));
+
+my @processed;
+my $round = 1;
+
+for @scores -> $score
+{
+ given $score
+ {
+ when Int { @processed.push: $score; }
+ when '+' { @processed.push: @processed[*-1] + @processed[*-2]; }
+ when 'C' { @processed.pop; }
+ when 'D' { @processed.push: @processed[*-1] * 2; }
+ default { die "Illegal score $score"; }
+ }
+ say ": Round { $round++ }: Value:$score -> Scores: { @processed.join(",") }" if $verbose;
+}
+
+say @processed.sum; \ No newline at end of file