From f2db6bb45f936cc066baba6828249999c88cc760 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 5 Aug 2024 06:47:50 +0000 Subject: Challenge 281 Solutions (Raku) --- challenge-281/mark-anderson/raku/ch-2.raku | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/challenge-281/mark-anderson/raku/ch-2.raku b/challenge-281/mark-anderson/raku/ch-2.raku index 404722c057..88d11a0976 100644 --- a/challenge-281/mark-anderson/raku/ch-2.raku +++ b/challenge-281/mark-anderson/raku/ch-2.raku @@ -11,29 +11,27 @@ sub knights-move($start is copy, $end is copy) $start .= &coordinates; $end .= &coordinates; - my $dx := -2, -1, 1, 2, -2, -1, 1, 2; - my $dy := -1, -2, -2, -1, 1, 2, 2, 1; + my $mv := (-2,-1),(-1,-2),(1,-2),(2,-1),(-2,1),(-1,2),(1,2),(2,1); my @queue; my @visit; - @queue.push: { :x($start[0]), :y($start[1]), :dis(0) } + @queue.push: { :xy($start), :dis(0) } @visit[$start[0];$start[1]] = True; while @queue { my %t = shift @queue; - return %t if all(%t == $end[0], %t == $end[1]); + return %t if %t eqv $end; for ^8 { - my $x = %t + $dx[$_]; - my $y = %t + $dy[$_]; + my $xy := %t >>+<< $mv[$_]; - if all(all($x,$y) ~~ ^8, not @visit[$x;$y]) + if all(all($xy) ~~ ^8, not @visit[$xy[0];$xy[1]]) { - @visit[$x;$y] = True; - @queue.push: { :$x, :$y, :dis(%t + 1) } + @visit[$xy[0];$xy[1]] = True; + @queue.push: { :$xy, :dis(%t + 1) } } } } -- cgit