diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-07 01:39:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-07 01:39:11 +0100 |
| commit | ed0fbcc80f3ddbba8447dc9db27300840ecbf827 (patch) | |
| tree | fbb95d57f2d4ab5f1c23b448fb45bf23f35bc16c | |
| parent | 1f25293425e50ac9d91c69464d3b374a35d62825 (diff) | |
| parent | a342a2a8c68002436c2de98b8436cd8e85558079 (diff) | |
| download | perlweeklychallenge-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
| -rw-r--r-- | challenge-211/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-211/arne-sommer/raku/ch-1.raku | 43 | ||||
| -rwxr-xr-x | challenge-211/arne-sommer/raku/ch-2.raku | 28 | ||||
| -rwxr-xr-x | challenge-211/arne-sommer/raku/split-same-average | 28 | ||||
| -rwxr-xr-x | challenge-211/arne-sommer/raku/toeplitz-matrix | 43 |
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'; |
