From d6b54fcaf75a52c3b0d282a48b78c9ffe0be7492 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:41:50 +0000 Subject: Challenge 266 Solutions (Raku) --- challenge-266/mark-anderson/raku/ch-2.raku | 24 +++++++++++------------- 1 file 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[*;*]) } -- cgit