diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2024-08-05 20:01:29 +0200 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2024-08-05 20:01:29 +0200 |
| commit | 1a09a37ffd076a2f5ba66eb55f4391851946ee27 (patch) | |
| tree | 28d5e72bb3a888d089851f0e0f79559238384bb7 | |
| parent | fb45c676a28e4d47d81cba82f273059f255de670 (diff) | |
| download | perlweeklychallenge-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.raku | 18 |
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; |
