diff options
| -rw-r--r-- | challenge-088/wambash/raku/ch-1.raku | 17 | ||||
| -rw-r--r-- | challenge-088/wambash/raku/ch-2.raku | 43 |
2 files changed, 60 insertions, 0 deletions
diff --git a/challenge-088/wambash/raku/ch-1.raku b/challenge-088/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..0d5632ed65 --- /dev/null +++ b/challenge-088/wambash/raku/ch-1.raku @@ -0,0 +1,17 @@ +#!/usr/bin/env raku + +sub array-of-product (+@n) { + @n + andthen .keys + andthen .map: { [*] @n[ 0 ..^ $_, $_ ^.. * ].flat } +} + +multi MAIN (+@n) { + say array-of-product @n +} + +multi MAIN (Bool :$test!) { + use Test; + is array-of-product(5, 2, 1, 4, 3), (24, 60, 120, 30, 40); + is array-of-product(2, 1, 4, 3), (12, 24, 6, 8); +} diff --git a/challenge-088/wambash/raku/ch-2.raku b/challenge-088/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..bce07d29b6 --- /dev/null +++ b/challenge-088/wambash/raku/ch-2.raku @@ -0,0 +1,43 @@ +#!/usr/bin/env raku + +my @matrix = [ + [ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 7, 8, 9 ], + ]; + +sub rotate-left (+@n) { + @n[0].keys + andthen .reverse + andthen .map: { @n[*;$_] }\ +} + +sub spiral-matrix (+@n) { + \( matrix => @n, spiral => Empty ), { \( matrix => .<matrix>.skip.&rotate-left, spiral => .<matrix>.head ) } ... !*.<matrix> + andthen .map: |*.<spiral> +} + +multi MAIN (Bool :$test!) { + use Test; + + my @matrix = ( + 1, 2, 3 ; + 4, 5, 6 ; + 7, 8, 9 ; + ); + my $rotated = ( + 3,6,9; + 2,5,8; + 1,4,7; + ); + my @matrix2 = ( + 1, 2, 3, 4 ; + 5, 6, 7, 8 ; + 9, 10, 11, 12 ; + 13, 14, 15, 16 ; + ); + + is-deeply rotate-left(@matrix), $rotated; + is-deeply spiral-matrix(@matrix), (1, 2, 3, 6, 9, 8, 7, 4, 5); + is-deeply spiral-matrix(@matrix2), (1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10); +} |
