aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2022-12-31 14:24:48 +0100
committerarnesom <arne@bbop.org>2022-12-31 14:24:48 +0100
commit30e865b0362c495bc9ea06ec4076480ba729682e (patch)
tree8fa5e7330d35a657a70800afdb6100dbb85ef5a5
parentb098cc23412eef7e2eafe6e68e7252ef2895a82d (diff)
downloadperlweeklychallenge-club-30e865b0362c495bc9ea06ec4076480ba729682e.tar.gz
perlweeklychallenge-club-30e865b0362c495bc9ea06ec4076480ba729682e.tar.bz2
perlweeklychallenge-club-30e865b0362c495bc9ea06ec4076480ba729682e.zip
Arne Sommer
-rw-r--r--challenge-197/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-197/arne-sommer/raku/ch-1.raku10
-rwxr-xr-xchallenge-197/arne-sommer/raku/ch-2.raku17
-rwxr-xr-xchallenge-197/arne-sommer/raku/move-zero10
-rwxr-xr-xchallenge-197/arne-sommer/raku/move-zero-unravel24
-rwxr-xr-xchallenge-197/arne-sommer/raku/wiggle-sort17
-rwxr-xr-xchallenge-197/arne-sommer/raku/wiggle-sort-even17
7 files changed, 96 insertions, 0 deletions
diff --git a/challenge-197/arne-sommer/blog.txt b/challenge-197/arne-sommer/blog.txt
new file mode 100644
index 0000000000..3f2ba6b6b8
--- /dev/null
+++ b/challenge-197/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/zero-wiggle.html
diff --git a/challenge-197/arne-sommer/raku/ch-1.raku b/challenge-197/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..ecacb70367
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 0 && all(@list) ~~ /^<[0..9]>*$/);
+
+my @non-zero = @list.grep: * != 0;
+my @zero = @list.grep: * == 0;
+
+my @wiggly = (@non-zero, @zero).flat;
+
+say "(", @wiggly.join(", "), ")";
diff --git a/challenge-197/arne-sommer/raku/ch-2.raku b/challenge-197/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..5e940db6ab
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 1, :v(:$verbose));
+
+my $half = Int(@list.elems / 2);
+my @sorted = @list.sort.reverse;
+my @low = @sorted[$half .. Inf];
+my @high = @sorted[^$half];
+
+if $verbose
+{
+ say ":Sorted: @sorted[]";
+ say ":Lower half: @low[]";
+ say ":Higher half: @high[]";
+}
+
+say "(", roundrobin(@low, @high).flat.join(","), ")";
diff --git a/challenge-197/arne-sommer/raku/move-zero b/challenge-197/arne-sommer/raku/move-zero
new file mode 100755
index 0000000000..ecacb70367
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/move-zero
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 0 && all(@list) ~~ /^<[0..9]>*$/);
+
+my @non-zero = @list.grep: * != 0;
+my @zero = @list.grep: * == 0;
+
+my @wiggly = (@non-zero, @zero).flat;
+
+say "(", @wiggly.join(", "), ")";
diff --git a/challenge-197/arne-sommer/raku/move-zero-unravel b/challenge-197/arne-sommer/raku/move-zero-unravel
new file mode 100755
index 0000000000..a65378cbe4
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/move-zero-unravel
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 0 && all(@list) ~~ /^<[0..9]>*$/);
+
+sub unravel(@list, $coderef)
+{
+ my @match;
+ my @nomatch;
+
+ for @list -> $elem
+ {
+ $coderef($elem)
+ ?? @match.push: $elem.Int
+ !! @nomatch.push: $elem.Int;
+ }
+
+ return @match, @nomatch;
+}
+
+my ($non-zero, $zero) = unravel(@list, { $_ != 0 } );
+
+my @wiggly = ($non-zero.List, $zero.List).flat;
+
+say "(", @wiggly.join(", "), ")";
diff --git a/challenge-197/arne-sommer/raku/wiggle-sort b/challenge-197/arne-sommer/raku/wiggle-sort
new file mode 100755
index 0000000000..5e940db6ab
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/wiggle-sort
@@ -0,0 +1,17 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 1, :v(:$verbose));
+
+my $half = Int(@list.elems / 2);
+my @sorted = @list.sort.reverse;
+my @low = @sorted[$half .. Inf];
+my @high = @sorted[^$half];
+
+if $verbose
+{
+ say ":Sorted: @sorted[]";
+ say ":Lower half: @low[]";
+ say ":Higher half: @high[]";
+}
+
+say "(", roundrobin(@low, @high).flat.join(","), ")";
diff --git a/challenge-197/arne-sommer/raku/wiggle-sort-even b/challenge-197/arne-sommer/raku/wiggle-sort-even
new file mode 100755
index 0000000000..f3f0dc7a00
--- /dev/null
+++ b/challenge-197/arne-sommer/raku/wiggle-sort-even
@@ -0,0 +1,17 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 1 && @list.elems %% 2, :v(:$verbose));
+
+my $half = @list.elems / 2;
+my @sorted = @list.sort.reverse;
+my @low = @sorted[$half .. Inf];
+my @high = @sorted[^$half];
+
+if $verbose
+{
+ say ":Sorted: @sorted[]";
+ say ":Lower half: @low[]";
+ say ":Higher half: @high[]";
+}
+
+say "(", (@low Z @high).flat.join(","), ")";