aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-08-05 19:59:40 +0100
committerGitHub <noreply@github.com>2024-08-05 19:59:40 +0100
commitc0a61d89e8d35ef4c35b8eabff80d959925f5761 (patch)
tree314552e262a9bd5c8cff287ba855aebcc77b5d36
parent0fb8dfe8f0385b42098ec01d0bf5e8d83ce46f4b (diff)
parent1a09a37ffd076a2f5ba66eb55f4391851946ee27 (diff)
downloadperlweeklychallenge-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.raku21
-rw-r--r--challenge-281/wambash/raku/ch-2.raku48
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
+}