aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2024-04-22 13:41:50 +0000
committerMark <53903062+andemark@users.noreply.github.com>2024-04-22 13:41:50 +0000
commitd6b54fcaf75a52c3b0d282a48b78c9ffe0be7492 (patch)
tree7d0fb78606ac3f7bb21d5bd195ef0fb36326282b
parent0d0786251e3bbad518369159ef9a357ec01981d9 (diff)
downloadperlweeklychallenge-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.raku24
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[*;*])
}