aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2024-08-05 20:01:29 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2024-08-05 20:01:29 +0200
commit1a09a37ffd076a2f5ba66eb55f4391851946ee27 (patch)
tree28d5e72bb3a888d089851f0e0f79559238384bb7
parentfb45c676a28e4d47d81cba82f273059f255de670 (diff)
downloadperlweeklychallenge-club-1a09a37ffd076a2f5ba66eb55f4391851946ee27.tar.gz
perlweeklychallenge-club-1a09a37ffd076a2f5ba66eb55f4391851946ee27.tar.bz2
perlweeklychallenge-club-1a09a37ffd076a2f5ba66eb55f4391851946ee27.zip
direct making adjacency-list
-rw-r--r--challenge-281/wambash/raku/ch-2.raku18
1 files changed, 8 insertions, 10 deletions
diff --git a/challenge-281/wambash/raku/ch-2.raku b/challenge-281/wambash/raku/ch-2.raku
index 85cbe99c8b..8a96934cd6 100644
--- a/challenge-281/wambash/raku/ch-2.raku
+++ b/challenge-281/wambash/raku/ch-2.raku
@@ -4,29 +4,27 @@ use Graph;
enum Col (<a>..<h>);
-enum Row (1=> 1, slip 2..8);
+enum Row (1 => 1, slip 2..8);
constant @vertices = Col::.values.sort X, Row::.values.sort;
sub move ( @ (Col $col, Row $row), @ ($col-diff,$row-diff) ) {
- try { Col($col+$col-diff), Row($row+$row-diff) }\
+ try { Col($col+$col-diff), Row($row+$row-diff) }\
orelse Empty
}
sub knight-jump ( +@vertex (Col $, Row $) ) {
- 1 X, (-2, 2)
+ -1, 1 X, -2, 2
andthen .map: { slip $_, .reverse }\
andthen .map: &move.assuming(@vertex)\
}
-constant @edges = (
- @vertices
- andthen .map: { slip $_.join X, knight-jump $_ }\
- andthen .map: { %( from => .[0].join, to => .[1].join, weight => 1 ) }
+constant %adjacency-list = %(
+ @vertices.map: { $_.join => set knight-jump($_).map: *.join }\
);
constant knight-moves = Graph.new(
- @edges
+ :%adjacency-list
);
sub knight's-move ($start, $end) {
@@ -36,8 +34,8 @@ sub knight's-move ($start, $end) {
multi MAIN (Bool :test($)!) {
use Test;
- is knight-jump( g, Row(2) ), ((e,Row(3)),(h,Row(4)),);
- is knight-jump( c, Row(4) ), ((d,Row(2)),(a,Row(5)),(d,Row(6)),(e,Row(5)));
+ is knight-jump( g, Row(2) ), ((e,Row(1)),(f,Row(4)),(e,Row(3)),(h,Row(4)),);
+ is knight-jump( c, Row(4) ), ((b,Row(2)),(a,Row(3)),(b,Row(6)),(e,Row(3)),(d,Row(2)),(a,Row(5)),(d,Row(6)),(e,Row(5)));
is knight's-move('g2','a8'), 4;
is knight's-move('g2','h2'), 3;
is knight's-move('g2','h4'), 1;