diff options
| author | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-02-22 03:32:10 -0700 |
|---|---|---|
| committer | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-02-22 03:32:10 -0700 |
| commit | 2603f59ed434830438acfc1417c0e0801931cd2b (patch) | |
| tree | 0acf192891220731b71623fa9695824e125b0df8 /challenge-101/mark-anderson | |
| parent | 2c26164a5a90aa14a19078d845769d3ec9fbb5ae (diff) | |
| download | perlweeklychallenge-club-2603f59ed434830438acfc1417c0e0801931cd2b.tar.gz perlweeklychallenge-club-2603f59ed434830438acfc1417c0e0801931cd2b.tar.bz2 perlweeklychallenge-club-2603f59ed434830438acfc1417c0e0801931cd2b.zip | |
initial ch-1.raku
Diffstat (limited to 'challenge-101/mark-anderson')
| -rw-r--r-- | challenge-101/mark-anderson/raku/ch-1.p6 | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/challenge-101/mark-anderson/raku/ch-1.p6 b/challenge-101/mark-anderson/raku/ch-1.p6 new file mode 100644 index 0000000000..403ca98fa8 --- /dev/null +++ b/challenge-101/mark-anderson/raku/ch-1.p6 @@ -0,0 +1,72 @@ +#!/usr/bin/env raku + +use Test; +plan 5; + +is-deeply pack-a-spiral(1..4), [[4, 3], [1, 2]]; +is-deeply pack-a-spiral(1..6), [[6, 5, 4], [1, 2, 3]]; +is-deeply pack-a-spiral(1..12), [[9, 8, 7, 6], [10, 11, 12, 5], [1, 2, 3, 4]]; +is-deeply pack-a-spiral(1..143), +[ +[ 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23], +[ 36, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 22], +[ 37, 74, 103, 102, 101, 100, 99, 98, 97, 96, 95, 62, 21], +[ 38, 75, 104, 125, 124, 123, 122, 121, 120, 119, 94, 61, 20], +[ 39, 76, 105, 126, 139, 138, 137, 136, 135, 118, 93, 60, 19], +[ 40, 77, 106, 127, 140, 141, 142, 143, 134, 117, 92, 59, 18], +[ 41, 78, 107, 128, 129, 130, 131, 132, 133, 116, 91, 58, 17], +[ 42, 79, 108, 109, 110, 111, 112, 113, 114, 115, 90, 57, 16], +[ 43, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 56, 15], +[ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 14], +[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] +]; +is-deeply pack-a-spiral(1..144), +[ +[ 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23], +[ 35, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 22], +[ 36, 73, 102, 101, 100, 99, 98, 97, 96, 95, 62, 21], +[ 37, 74, 103, 124, 123, 122, 121, 120, 119, 94, 61, 20], +[ 38, 75, 104, 125, 138, 137, 136, 135, 118, 93, 60, 19], +[ 39, 76, 105, 126, 139, 144, 143, 134, 117, 92, 59, 18], +[ 40, 77, 106, 127, 140, 141, 142, 133, 116, 91, 58, 17], +[ 41, 78, 107, 128, 129, 130, 131, 132, 115, 90, 57, 16], +[ 42, 79, 108, 109, 110, 111, 112, 113, 114, 89, 56, 15], +[ 43, 80, 81, 82, 83, 84, 85, 86, 87, 88, 55, 14], +[ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 13], +[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +]; + +sub pack-a-spiral(@A is copy) +{ + my $f = tightest-factor(@A.elems); + my @k = @A.keys.rotor($f); + @k = spiral(@k.map(*.Array).Array); + @A[@k] = @A; + @A.rotor($f).map(*.Array).reverse.Array; +} + +sub tightest-factor($n) +{ + return 1 if $n.is-prime; + my $s = sqrt($n); + return $s if $s.narrow ~~ UInt; + my @f = grep { $n %% $_ }, 2..$n/2; + return @f[@f/2]; +} + +# +#| code from challenge 88 +# +sub spiral(@matrix) { + my @r; + + while @matrix + { + @r.append: |@matrix.shift; + try { @r.push: .pop } for @matrix; + try @r.append: $_ given @matrix.pop.reverse; + try -> $i { @r.push: .[$i].shift } for .end...0 given @matrix; + } + + @r; +} |
