aboutsummaryrefslogtreecommitdiff
path: root/challenge-242
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2023-11-12 22:42:35 +0100
committerarnesom <arne@bbop.org>2023-11-12 22:42:35 +0100
commitcecfd0c9af5b623a2bd6eba2c83f15cac6034ac4 (patch)
tree5a2e44d191df9f78473353e660920344a3082063 /challenge-242
parent361b1d5d59c9ef4a056d53e6e15ae50abd4765c6 (diff)
downloadperlweeklychallenge-club-cecfd0c9af5b623a2bd6eba2c83f15cac6034ac4.tar.gz
perlweeklychallenge-club-cecfd0c9af5b623a2bd6eba2c83f15cac6034ac4.tar.bz2
perlweeklychallenge-club-cecfd0c9af5b623a2bd6eba2c83f15cac6034ac4.zip
Arne Sommer
Diffstat (limited to 'challenge-242')
-rw-r--r--challenge-242/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-242/arne-sommer/raku/ch-1.raku18
-rwxr-xr-xchallenge-242/arne-sommer/raku/ch-2.raku24
-rwxr-xr-xchallenge-242/arne-sommer/raku/flip-matrix24
-rwxr-xr-xchallenge-242/arne-sommer/raku/missing-members18
5 files changed, 85 insertions, 0 deletions
diff --git a/challenge-242/arne-sommer/blog.txt b/challenge-242/arne-sommer/blog.txt
new file mode 100644
index 0000000000..9ccddc4ef7
--- /dev/null
+++ b/challenge-242/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/missing-matrix.html
diff --git a/challenge-242/arne-sommer/raku/ch-1.raku b/challenge-242/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..d69dab06a8
--- /dev/null
+++ b/challenge-242/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $arr1, $arr2);
+
+my @arr1 = $arr1.words>>.Int;
+my @arr2 = $arr2.words>>.Int;
+
+die "@arr1: Must be integers only" unless all(@arr1) ~~ Int;
+die "@arr2: Must be integers only" unless all(@arr2) ~~ Int;
+
+my @missing2 = (@arr1 (-) @arr2).keys.sort;
+my @missing1 = (@arr2 (-) @arr1).keys.sort;
+
+print "(";
+print "[{ @missing2.join(", ") }]" if @missing2.elems;
+print ", " if @missing2.elems && @missing1.elems;
+print "[{ @missing1.join(", ") }]" if @missing1.elems;
+say ")";
diff --git a/challenge-242/arne-sommer/raku/ch-2.raku b/challenge-242/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..6a9e9c8cde
--- /dev/null
+++ b/challenge-242/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $matrix = "1 1 0 | 1 0 1 | 0 0 0", :v(:$verbose));
+
+my @matrix = $matrix.split("|")>>.words>>.Array;
+my @rows = @matrix>>.elems;
+
+die "Must have at least 1 row" unless @rows.elems >= 1;
+die "The rows must have the same size" unless [==] @rows;
+die "Must contain 0 and 1 only" unless all(@matrix[*;*]) eq any(0,1);
+die "Must have the same number of columns and rows" unless @rows.elems == @rows[0];
+
+my @reverse = @matrix>>.Int>>.reverse>>.Array;
+my @inverted = @reverse>>.&invert;
+
+say ": Matrix: { @matrix.raku }" if $verbose;
+say ": Reverse: { @reverse.raku }" if $verbose;
+
+say @inverted.List.raku;
+
+multi sub invert (*@bool)
+{
+ return |@bool.map( + ! * ).Array;
+}
diff --git a/challenge-242/arne-sommer/raku/flip-matrix b/challenge-242/arne-sommer/raku/flip-matrix
new file mode 100755
index 0000000000..6a9e9c8cde
--- /dev/null
+++ b/challenge-242/arne-sommer/raku/flip-matrix
@@ -0,0 +1,24 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $matrix = "1 1 0 | 1 0 1 | 0 0 0", :v(:$verbose));
+
+my @matrix = $matrix.split("|")>>.words>>.Array;
+my @rows = @matrix>>.elems;
+
+die "Must have at least 1 row" unless @rows.elems >= 1;
+die "The rows must have the same size" unless [==] @rows;
+die "Must contain 0 and 1 only" unless all(@matrix[*;*]) eq any(0,1);
+die "Must have the same number of columns and rows" unless @rows.elems == @rows[0];
+
+my @reverse = @matrix>>.Int>>.reverse>>.Array;
+my @inverted = @reverse>>.&invert;
+
+say ": Matrix: { @matrix.raku }" if $verbose;
+say ": Reverse: { @reverse.raku }" if $verbose;
+
+say @inverted.List.raku;
+
+multi sub invert (*@bool)
+{
+ return |@bool.map( + ! * ).Array;
+}
diff --git a/challenge-242/arne-sommer/raku/missing-members b/challenge-242/arne-sommer/raku/missing-members
new file mode 100755
index 0000000000..d69dab06a8
--- /dev/null
+++ b/challenge-242/arne-sommer/raku/missing-members
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $arr1, $arr2);
+
+my @arr1 = $arr1.words>>.Int;
+my @arr2 = $arr2.words>>.Int;
+
+die "@arr1: Must be integers only" unless all(@arr1) ~~ Int;
+die "@arr2: Must be integers only" unless all(@arr2) ~~ Int;
+
+my @missing2 = (@arr1 (-) @arr2).keys.sort;
+my @missing1 = (@arr2 (-) @arr1).keys.sort;
+
+print "(";
+print "[{ @missing2.join(", ") }]" if @missing2.elems;
+print ", " if @missing2.elems && @missing1.elems;
+print "[{ @missing1.join(", ") }]" if @missing1.elems;
+say ")";