aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-11-23 15:33:47 -0700
committerMark Anderson <mark@frontrangerunner.com>2020-11-23 15:33:47 -0700
commit11e8a25fd36566f94c79440c93ad2c3743221d72 (patch)
tree33493a96bc16b92cf81bbb4dc7406bc38c29d1cd
parenta36f58dcbcc932577398a98e53e7c445cff7bd0f (diff)
downloadperlweeklychallenge-club-11e8a25fd36566f94c79440c93ad2c3743221d72.tar.gz
perlweeklychallenge-club-11e8a25fd36566f94c79440c93ad2c3743221d72.tar.bz2
perlweeklychallenge-club-11e8a25fd36566f94c79440c93ad2c3743221d72.zip
initial
-rw-r--r--challenge-088/mark-anderson/raku/ch-1.p618
-rw-r--r--challenge-088/mark-anderson/raku/ch-2.p656
2 files changed, 74 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..10ac6b394d
--- /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).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..1215e036e6
--- /dev/null
+++ b/challenge-088/mark-anderson/raku/ch-2.p6
@@ -0,0 +1,56 @@
+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 = @matrix.elems * @matrix[0].elems;
+ my $c = 0;
+ my @result;
+
+ for @trips -> @t {
+ for @t -> @step {
+ @result.push: @step[$c..*-$c-2];
+ }
+ $c++;
+ }
+
+ @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 = @matrix / 2;
+ @result[*-1] = @matrix[$i][$i];
+ }
+
+ @result;
+}