aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-11-24 09:20:34 +0000
committerGitHub <noreply@github.com>2020-11-24 09:20:34 +0000
commit177930d40fb809f6d404c91d07b0536fbd9e889c (patch)
treeb5bb284edae6e6103d6cc85673c962c7b5dabd08
parent4eae3ca2345fb9254c45b884b5fe35fcafc85f2e (diff)
parent4553f61ddfe9b5ed152da2479e7e637f4b44d0ed (diff)
downloadperlweeklychallenge-club-177930d40fb809f6d404c91d07b0536fbd9e889c.tar.gz
perlweeklychallenge-club-177930d40fb809f6d404c91d07b0536fbd9e889c.tar.bz2
perlweeklychallenge-club-177930d40fb809f6d404c91d07b0536fbd9e889c.zip
Merge pull request #2836 from andemark/branch-for-challenge-088
initial
-rw-r--r--challenge-088/mark-anderson/raku/ch-1.p618
-rw-r--r--challenge-088/mark-anderson/raku/ch-2.p654
2 files changed, 72 insertions, 0 deletions
diff --git a/challenge-088/mark-anderson/raku/ch-1.p6 b/challenge-088/mark-anderson/raku/ch-1.p6
new file mode 100644
index 0000000000..64036b5b28
--- /dev/null
+++ b/challenge-088/mark-anderson/raku/ch-1.p6
@@ -0,0 +1,18 @@
+multi MAIN(*@n where .all ~~ Int) {
+ say array-of-product(@n).raku;
+}
+
+multi MAIN {
+ use Test;
+ plan 2;
+
+ my @n = [5, 2, 1, 4, 3];
+ cmp-ok array-of-product(@n), &[eqv], [24, 60, 120, 30, 40], "Example 1";
+
+ @n = [2, 1, 4, 3];
+ cmp-ok array-of-product(@n), &[eqv], [12, 24, 6, 8], "Example 2";
+}
+
+sub array-of-product(@n) {
+ @n.keys.map(-> $i { [*] @n[^$i, $i+1..@n.end].flat }).Array;
+}
diff --git a/challenge-088/mark-anderson/raku/ch-2.p6 b/challenge-088/mark-anderson/raku/ch-2.p6
new file mode 100644
index 0000000000..000716f7a2
--- /dev/null
+++ b/challenge-088/mark-anderson/raku/ch-2.p6
@@ -0,0 +1,54 @@
+use Test;
+plan 4;
+
+my @matrix = [ 1, 2, 3 ],
+ [ 4, 5, 6 ],
+ [ 7, 8, 9 ];
+
+cmp-ok spiral(@matrix), &[eqv], [1, 2, 3, 6, 9, 8, 7, 4, 5], "Example 1";
+
+@matrix = [ 1 .. 4 ],
+ [ 5 .. 8 ],
+ [ 9 .. 12 ],
+ [ 13 .. 16 ];
+
+cmp-ok spiral(@matrix), &[eqv],
+ [1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10], "Example 2";
+
+@matrix = [ 1, 2 ],
+ [ 3, 4 ],
+ [ 5, 6 ],
+ [ 7, 8 ];
+
+cmp-ok spiral(@matrix), &[eqv], [1, 2, 4, 6, 8, 7, 5, 3], "Rows > Cols";
+
+@matrix = [ 1, 2, 3, 4 ],
+ [ 5, 6, 7, 8 ];
+
+cmp-ok spiral(@matrix), &[eqv], [1, 2, 3, 4, 8, 7, 6, 5], "Cols > Rows";
+
+sub spiral(@step1) {
+ my @step2 = ([Z] @step1).reverse;
+ my @step3 = ([Z] @step2).reverse;
+ my @step4 = ([Z] @step3).reverse;
+ my @trips = [Z] @step1, @step2, @step3, @step4;
+ my $elems = @step1.elems * @step1[0].elems;
+ my @result;
+
+ for @trips.kv -> $k, @t {
+ for @t -> @step {
+ @result.push: @step[$k..*-$k-2];
+ }
+ }
+
+ @result = (@result>>.Array).flat[^$elems];
+
+ # handle the case when matrix is 3 X 3, 5 X 5, 7 X 7
+ # etc. where I can't seem to get the center element :(
+ unless @result[*-1] {
+ my $i = @step1 / 2;
+ @result[*-1] = @step1[$i][$i];
+ }
+
+ @result;
+}