aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2024-01-23 20:37:32 +0100
committerarnesom <arne@bbop.org>2024-01-23 20:37:32 +0100
commit08ac8da893129787ba12a31a0134b107bbf3474f (patch)
tree78d35747078f92d8315d47c3aca629577a1eba3f
parent85ec742ed6cf1ef0bc460a77a0877bf944b7924f (diff)
downloadperlweeklychallenge-club-08ac8da893129787ba12a31a0134b107bbf3474f.tar.gz
perlweeklychallenge-club-08ac8da893129787ba12a31a0134b107bbf3474f.tar.bz2
perlweeklychallenge-club-08ac8da893129787ba12a31a0134b107bbf3474f.zip
Arne Sommer
-rw-r--r--challenge-253/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-253/arne-sommer/raku/ch-1.raku6
-rwxr-xr-xchallenge-253/arne-sommer/raku/ch-2.raku18
-rwxr-xr-xchallenge-253/arne-sommer/raku/split-strings6
-rwxr-xr-xchallenge-253/arne-sommer/raku/weakest-row18
5 files changed, 49 insertions, 0 deletions
diff --git a/challenge-253/arne-sommer/blog.txt b/challenge-253/arne-sommer/blog.txt
new file mode 100644
index 0000000000..cc2b8c2a41
--- /dev/null
+++ b/challenge-253/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/weakest-split.html
diff --git a/challenge-253/arne-sommer/raku/ch-1.raku b/challenge-253/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..d5f105c387
--- /dev/null
+++ b/challenge-253/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,6 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($separator where $separator.chars == 1,
+ *@words where @words.elems > 0);
+
+say @words>>.split($separator).[*;*].grep( *.chars ).map( '"' ~ * ~ '"' ).join(",");
diff --git a/challenge-253/arne-sommer/raku/ch-2.raku b/challenge-253/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..9dd140d79d
--- /dev/null
+++ b/challenge-253/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string = "1 0 0 0 | 1 1 1 1 | 1 0 0 0 | 1 0 0 0", :v(:$verbose));
+
+my $matrix = $string.split("|")>>.words>>.Int>>.Array;
+my @values = $matrix[*;*];
+
+die "The rows must have the same size" unless [==] $matrix>>.elems;
+die "0 and 1 only" unless all(@values) ~~ any(0,1);
+die "1 before 0 only" unless $matrix>>.reduce( &infix:«>=» );
+
+my @pairs = $matrix>>.sum.pairs;
+my @sorted = @pairs.sort({ $^a.value <=> $^b.value || $^a.key <=> $^b.key });
+
+say ":Pairs: { @pairs.raku }" if $verbose;
+say ":Sorted: { @sorted.raku }" if $verbose;
+
+say "({ @sorted>>.key.join(", ") })";
diff --git a/challenge-253/arne-sommer/raku/split-strings b/challenge-253/arne-sommer/raku/split-strings
new file mode 100755
index 0000000000..d5f105c387
--- /dev/null
+++ b/challenge-253/arne-sommer/raku/split-strings
@@ -0,0 +1,6 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($separator where $separator.chars == 1,
+ *@words where @words.elems > 0);
+
+say @words>>.split($separator).[*;*].grep( *.chars ).map( '"' ~ * ~ '"' ).join(",");
diff --git a/challenge-253/arne-sommer/raku/weakest-row b/challenge-253/arne-sommer/raku/weakest-row
new file mode 100755
index 0000000000..9dd140d79d
--- /dev/null
+++ b/challenge-253/arne-sommer/raku/weakest-row
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string = "1 0 0 0 | 1 1 1 1 | 1 0 0 0 | 1 0 0 0", :v(:$verbose));
+
+my $matrix = $string.split("|")>>.words>>.Int>>.Array;
+my @values = $matrix[*;*];
+
+die "The rows must have the same size" unless [==] $matrix>>.elems;
+die "0 and 1 only" unless all(@values) ~~ any(0,1);
+die "1 before 0 only" unless $matrix>>.reduce( &infix:«>=» );
+
+my @pairs = $matrix>>.sum.pairs;
+my @sorted = @pairs.sort({ $^a.value <=> $^b.value || $^a.key <=> $^b.key });
+
+say ":Pairs: { @pairs.raku }" if $verbose;
+say ":Sorted: { @sorted.raku }" if $verbose;
+
+say "({ @sorted>>.key.join(", ") })";