diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2024-04-22 13:41:50 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2024-04-22 13:41:50 +0000 |
| commit | d6b54fcaf75a52c3b0d282a48b78c9ffe0be7492 (patch) | |
| tree | 7d0fb78606ac3f7bb21d5bd195ef0fb36326282b | |
| parent | 0d0786251e3bbad518369159ef9a357ec01981d9 (diff) | |
| download | perlweeklychallenge-club-d6b54fcaf75a52c3b0d282a48b78c9ffe0be7492.tar.gz perlweeklychallenge-club-d6b54fcaf75a52c3b0d282a48b78c9ffe0be7492.tar.bz2 perlweeklychallenge-club-d6b54fcaf75a52c3b0d282a48b78c9ffe0be7492.zip | |
Challenge 266 Solutions (Raku)
| -rw-r--r-- | challenge-266/mark-anderson/raku/ch-2.raku | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/challenge-266/mark-anderson/raku/ch-2.raku b/challenge-266/mark-anderson/raku/ch-2.raku index aad59c7e67..51b303c159 100644 --- a/challenge-266/mark-anderson/raku/ch-2.raku +++ b/challenge-266/mark-anderson/raku/ch-2.raku @@ -170,24 +170,22 @@ nok X-matrix([ ]), '21 X 21 non-diagonal non-zero'; +# This doesn't short circuit but I think I like it +# better than my previous solution anyway. sub X-matrix(+@m) { - my @diags = (0...@m.end) Z (@m.end...0); + my $diags := |((^@m) Z (^@m)), |((0...@m.end) Z (@m.end...0)); - # handle the center diagonal and middle row - if @diags.end %% 2 - { - return False unless all @m[.[0]].splice(.[1],1,0).head, - none @m[.[0]] - given @diags.splice(@m.elems div 2,1).head - } + my @replace = 0 xx $diags; + + @replace[@replace.elems div 4] = 1 if @m.end %% 2; - for @diags + my @diags = gather for $diags Z @replace -> ($d, $r) { - return False unless all @m[.[0]].splice(.[0],1,0).head, - @m[.[0]].splice(.[1],1,0).head, - none @m[.[0]] + my ($row, $col, $replace) = |$d, $r; + take @m[$row;$col]; + @m[$row;$col] = $replace } - True + all(all |@diags, none @m[*;*]) } |
