aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-286/arne-sommer/blog.txt2
-rwxr-xr-xchallenge-286/arne-sommer/raku/ch-1.raku9
-rwxr-xr-xchallenge-286/arne-sommer/raku/ch-2.raku33
-rwxr-xr-xchallenge-286/arne-sommer/raku/order-game33
-rwxr-xr-xchallenge-286/arne-sommer/raku/self-spammer9
5 files changed, 86 insertions, 0 deletions
diff --git a/challenge-286/arne-sommer/blog.txt b/challenge-286/arne-sommer/blog.txt
new file mode 100644
index 0000000000..d65b583a81
--- /dev/null
+++ b/challenge-286/arne-sommer/blog.txt
@@ -0,0 +1,2 @@
+https://raku-musings.com/self-order.html
+
diff --git a/challenge-286/arne-sommer/raku/ch-1.raku b/challenge-286/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..4ebe9678f6
--- /dev/null
+++ b/challenge-286/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:v(:$verbose));
+
+my @words = $*PROGRAM.slurp.split(/\s+/);
+
+say ": words: { @words.map("'" ~ * ~ "'").join(",") }" if $verbose;
+
+say @words.pick; \ No newline at end of file
diff --git a/challenge-286/arne-sommer/raku/ch-2.raku b/challenge-286/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..c81060961d
--- /dev/null
+++ b/challenge-286/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+my $powtwo := (1, 2, 4, 8 ... *);
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 0,
+ :v(:$verbose));
+
+my $length = @ints.elems;
+
+for $powtwo -> $int
+{
+ last if $int == $length;
+ die 'Wrong number of @ints. Should be power of two' if $int > $length;
+}
+
+while @ints.elems > 1
+{
+ say ":\@ints: ({ @ints.join(",") })" if $verbose;
+
+ my @new;
+ my $min = True;
+
+ for @ints -> $first, $second
+ {
+ @new.push($min ?? min($first, $second) !! max($first, $second) );
+
+ $min = ! $min;
+ }
+
+ @ints = @new;
+}
+
+say @ints.first;
diff --git a/challenge-286/arne-sommer/raku/order-game b/challenge-286/arne-sommer/raku/order-game
new file mode 100755
index 0000000000..c81060961d
--- /dev/null
+++ b/challenge-286/arne-sommer/raku/order-game
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+my $powtwo := (1, 2, 4, 8 ... *);
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && @ints.elems > 0,
+ :v(:$verbose));
+
+my $length = @ints.elems;
+
+for $powtwo -> $int
+{
+ last if $int == $length;
+ die 'Wrong number of @ints. Should be power of two' if $int > $length;
+}
+
+while @ints.elems > 1
+{
+ say ":\@ints: ({ @ints.join(",") })" if $verbose;
+
+ my @new;
+ my $min = True;
+
+ for @ints -> $first, $second
+ {
+ @new.push($min ?? min($first, $second) !! max($first, $second) );
+
+ $min = ! $min;
+ }
+
+ @ints = @new;
+}
+
+say @ints.first;
diff --git a/challenge-286/arne-sommer/raku/self-spammer b/challenge-286/arne-sommer/raku/self-spammer
new file mode 100755
index 0000000000..4ebe9678f6
--- /dev/null
+++ b/challenge-286/arne-sommer/raku/self-spammer
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:v(:$verbose));
+
+my @words = $*PROGRAM.slurp.split(/\s+/);
+
+say ": words: { @words.map("'" ~ * ~ "'").join(",") }" if $verbose;
+
+say @words.pick; \ No newline at end of file