aboutsummaryrefslogtreecommitdiff
path: root/challenge-211
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-04-07 01:39:11 +0100
committerGitHub <noreply@github.com>2023-04-07 01:39:11 +0100
commited0fbcc80f3ddbba8447dc9db27300840ecbf827 (patch)
treefbb95d57f2d4ab5f1c23b448fb45bf23f35bc16c /challenge-211
parent1f25293425e50ac9d91c69464d3b374a35d62825 (diff)
parenta342a2a8c68002436c2de98b8436cd8e85558079 (diff)
downloadperlweeklychallenge-club-ed0fbcc80f3ddbba8447dc9db27300840ecbf827.tar.gz
perlweeklychallenge-club-ed0fbcc80f3ddbba8447dc9db27300840ecbf827.tar.bz2
perlweeklychallenge-club-ed0fbcc80f3ddbba8447dc9db27300840ecbf827.zip
Merge pull request #7854 from arnesom/branch-for-challenge-211
Arne Sommer
Diffstat (limited to 'challenge-211')
-rw-r--r--challenge-211/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-211/arne-sommer/raku/ch-1.raku43
-rwxr-xr-xchallenge-211/arne-sommer/raku/ch-2.raku28
-rwxr-xr-xchallenge-211/arne-sommer/raku/split-same-average28
-rwxr-xr-xchallenge-211/arne-sommer/raku/toeplitz-matrix43
5 files changed, 143 insertions, 0 deletions
diff --git a/challenge-211/arne-sommer/blog.txt b/challenge-211/arne-sommer/blog.txt
new file mode 100644
index 0000000000..3fb70a3139
--- /dev/null
+++ b/challenge-211/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/same-toeplitz.html
diff --git a/challenge-211/arne-sommer/raku/ch-1.raku b/challenge-211/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..53e3a53d69
--- /dev/null
+++ b/challenge-211/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,43 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $matrix = "4 3 2 1 | 5 4 3 2 | 6 5 4 3", :v(:$verbose));
+
+my @matrix = $matrix.split("|")>>.words>>.Array;
+my @size = @matrix>>.elems;
+
+die "Must have at least 2 rows" unless @size.elems >= 2;
+die "The rows must have the same size" unless [==] @size;
+
+while @matrix.elems
+{
+ @matrix.shift if @matrix[0].elems == 0;
+
+ last unless @matrix.elems;
+
+ my $row = 0;
+ my $col = @matrix[$row].end;
+
+ my $value = @matrix[$row].pop;
+
+ say ": Row:0 { @matrix.raku } -> $value (last value removed from row)" if $verbose;
+
+ loop
+ {
+ $row++;
+ $col++;
+ last unless defined @matrix[$row];
+ last unless defined @matrix[$row][$col];
+
+ my $new = @matrix[$row].pop;
+
+ say ": Row:$row { @matrix.raku } -> $new (last value removed from row)" if $verbose;
+
+ unless $value eq $new
+ {
+ say 'false';
+ exit;
+ }
+ }
+}
+
+say 'true';
diff --git a/challenge-211/arne-sommer/raku/ch-2.raku b/challenge-211/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..f404108103
--- /dev/null
+++ b/challenge-211/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where @int.elems > 0 && @int.all ~~ UInt && @int.all > 0, :v(:$verbose));
+
+for @int.permutations.unique -> @candidate
+{
+ say ": Candidate: @candidate[]" if $verbose;
+
+ my @right = @candidate.clone;
+ my @left;
+
+ while @right.elems > 1
+ {
+ @left.push: @right.shift;
+ my $left-avg = @left.sum / @left.elems;
+ my $right-avg = @right.sum / @right.elems;
+
+ say ": - Comparing @left[] (avg: $left-avg) <=> @right[] (avg: $right-avg)" if $verbose;
+
+ if $left-avg == $right-avg
+ {
+ say 'true';
+ exit;
+ }
+ }
+}
+
+say 'false';
diff --git a/challenge-211/arne-sommer/raku/split-same-average b/challenge-211/arne-sommer/raku/split-same-average
new file mode 100755
index 0000000000..f404108103
--- /dev/null
+++ b/challenge-211/arne-sommer/raku/split-same-average
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where @int.elems > 0 && @int.all ~~ UInt && @int.all > 0, :v(:$verbose));
+
+for @int.permutations.unique -> @candidate
+{
+ say ": Candidate: @candidate[]" if $verbose;
+
+ my @right = @candidate.clone;
+ my @left;
+
+ while @right.elems > 1
+ {
+ @left.push: @right.shift;
+ my $left-avg = @left.sum / @left.elems;
+ my $right-avg = @right.sum / @right.elems;
+
+ say ": - Comparing @left[] (avg: $left-avg) <=> @right[] (avg: $right-avg)" if $verbose;
+
+ if $left-avg == $right-avg
+ {
+ say 'true';
+ exit;
+ }
+ }
+}
+
+say 'false';
diff --git a/challenge-211/arne-sommer/raku/toeplitz-matrix b/challenge-211/arne-sommer/raku/toeplitz-matrix
new file mode 100755
index 0000000000..53e3a53d69
--- /dev/null
+++ b/challenge-211/arne-sommer/raku/toeplitz-matrix
@@ -0,0 +1,43 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $matrix = "4 3 2 1 | 5 4 3 2 | 6 5 4 3", :v(:$verbose));
+
+my @matrix = $matrix.split("|")>>.words>>.Array;
+my @size = @matrix>>.elems;
+
+die "Must have at least 2 rows" unless @size.elems >= 2;
+die "The rows must have the same size" unless [==] @size;
+
+while @matrix.elems
+{
+ @matrix.shift if @matrix[0].elems == 0;
+
+ last unless @matrix.elems;
+
+ my $row = 0;
+ my $col = @matrix[$row].end;
+
+ my $value = @matrix[$row].pop;
+
+ say ": Row:0 { @matrix.raku } -> $value (last value removed from row)" if $verbose;
+
+ loop
+ {
+ $row++;
+ $col++;
+ last unless defined @matrix[$row];
+ last unless defined @matrix[$row][$col];
+
+ my $new = @matrix[$row].pop;
+
+ say ": Row:$row { @matrix.raku } -> $new (last value removed from row)" if $verbose;
+
+ unless $value eq $new
+ {
+ say 'false';
+ exit;
+ }
+ }
+}
+
+say 'true';