From 11e8a25fd36566f94c79440c93ad2c3743221d72 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 23 Nov 2020 15:33:47 -0700 Subject: initial --- challenge-088/mark-anderson/raku/ch-1.p6 | 18 ++++++++++ challenge-088/mark-anderson/raku/ch-2.p6 | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 challenge-088/mark-anderson/raku/ch-1.p6 create mode 100644 challenge-088/mark-anderson/raku/ch-2.p6 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; +} -- cgit From c5f691fd3ec23c4a0c8459d3504566eee3a6f865 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 23 Nov 2020 15:47:30 -0700 Subject: initial --- challenge-088/mark-anderson/raku/ch-2.p6 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/challenge-088/mark-anderson/raku/ch-2.p6 b/challenge-088/mark-anderson/raku/ch-2.p6 index 1215e036e6..0c98107dd0 100644 --- a/challenge-088/mark-anderson/raku/ch-2.p6 +++ b/challenge-088/mark-anderson/raku/ch-2.p6 @@ -32,7 +32,7 @@ sub spiral(@step1) { 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 $elems = @step1.elems * @step1[0].elems; my $c = 0; my @result; @@ -46,10 +46,10 @@ sub spiral(@step1) { @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. + # etc. where I can't seem to get the center element :( unless @result[*-1] { - my $i = @matrix / 2; - @result[*-1] = @matrix[$i][$i]; + my $i = @step1 / 2; + @result[*-1] = @step1[$i][$i]; } @result; -- cgit From 7b0e7c6f6fae54d73342e4337bb51d118007e073 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 23 Nov 2020 16:52:41 -0700 Subject: initial --- challenge-088/mark-anderson/raku/ch-2.p6 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/challenge-088/mark-anderson/raku/ch-2.p6 b/challenge-088/mark-anderson/raku/ch-2.p6 index 0c98107dd0..000716f7a2 100644 --- a/challenge-088/mark-anderson/raku/ch-2.p6 +++ b/challenge-088/mark-anderson/raku/ch-2.p6 @@ -33,14 +33,12 @@ sub spiral(@step1) { my @step4 = ([Z] @step3).reverse; my @trips = [Z] @step1, @step2, @step3, @step4; my $elems = @step1.elems * @step1[0].elems; - my $c = 0; my @result; - for @trips -> @t { + for @trips.kv -> $k, @t { for @t -> @step { - @result.push: @step[$c..*-$c-2]; + @result.push: @step[$k..*-$k-2]; } - $c++; } @result = (@result>>.Array).flat[^$elems]; -- cgit From 4553f61ddfe9b5ed152da2479e7e637f4b44d0ed Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 23 Nov 2020 17:16:41 -0700 Subject: initial --- challenge-088/mark-anderson/raku/ch-1.p6 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-088/mark-anderson/raku/ch-1.p6 b/challenge-088/mark-anderson/raku/ch-1.p6 index 10ac6b394d..64036b5b28 100644 --- a/challenge-088/mark-anderson/raku/ch-1.p6 +++ b/challenge-088/mark-anderson/raku/ch-1.p6 @@ -14,5 +14,5 @@ multi MAIN { } sub array-of-product(@n) { - (^@n).map(-> $i { [*] @n[^$i, $i+1..@n.end].flat }).Array; + @n.keys.map(-> $i { [*] @n[^$i, $i+1..@n.end].flat }).Array; } -- cgit