diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-08-05 19:59:40 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-05 19:59:40 +0100 |
| commit | c0a61d89e8d35ef4c35b8eabff80d959925f5761 (patch) | |
| tree | 314552e262a9bd5c8cff287ba855aebcc77b5d36 | |
| parent | 0fb8dfe8f0385b42098ec01d0bf5e8d83ce46f4b (diff) | |
| parent | 1a09a37ffd076a2f5ba66eb55f4391851946ee27 (diff) | |
| download | perlweeklychallenge-club-c0a61d89e8d35ef4c35b8eabff80d959925f5761.tar.gz perlweeklychallenge-club-c0a61d89e8d35ef4c35b8eabff80d959925f5761.tar.bz2 perlweeklychallenge-club-c0a61d89e8d35ef4c35b8eabff80d959925f5761.zip | |
Merge pull request #10548 from wambash/challenge-week-281
Challenge week 281
| -rw-r--r-- | challenge-281/wambash/raku/ch-1.raku | 21 | ||||
| -rw-r--r-- | challenge-281/wambash/raku/ch-2.raku | 48 |
2 files changed, 69 insertions, 0 deletions
diff --git a/challenge-281/wambash/raku/ch-1.raku b/challenge-281/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..f6aa3c168c --- /dev/null +++ b/challenge-281/wambash/raku/ch-1.raku @@ -0,0 +1,21 @@ +#!/usr/bin/env raku +enum Col (<a>..<h>); + +sub check-color ($coordinates) { + $coordinates + andthen .comb + andthen Col::{.[0]} + .[1] + andthen $_ %% 2 +} + +multi MAIN (Bool :test($)!) { + use Test; + is check-color('d3'), True; + is check-color('g5'), False; + is check-color('e6'), True; + done-testing; +} + +multi MAIN ($coordinates) { + say check-color $coordinates +} diff --git a/challenge-281/wambash/raku/ch-2.raku b/challenge-281/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..8a96934cd6 --- /dev/null +++ b/challenge-281/wambash/raku/ch-2.raku @@ -0,0 +1,48 @@ +#!/usr/bin/env raku +use v6.e.PREVIEW; +use Graph; + + +enum Col (<a>..<h>); +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) }\ + orelse Empty +} + +sub knight-jump ( +@vertex (Col $, Row $) ) { + -1, 1 X, -2, 2 + andthen .map: { slip $_, .reverse }\ + andthen .map: &move.assuming(@vertex)\ +} + +constant %adjacency-list = %( + @vertices.map: { $_.join => set knight-jump($_).map: *.join }\ +); + +constant knight-moves = Graph.new( + :%adjacency-list +); + +sub knight's-move ($start, $end) { + knight-moves.find-shortest-path: $start, $end + andthen .elems - 1 +} + +multi MAIN (Bool :test($)!) { + use Test; + 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; + is knight's-move('g2','g6'), 2; + done-testing; +} + +multi MAIN ($start, $end) { + say knight's-move $start, $end +} |
