aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-08-25 01:49:12 +0100
committerGitHub <noreply@github.com>2025-08-25 01:49:12 +0100
commitbd9e1aca68bfc077ce2d88506d24702d3b4bdc6c (patch)
tree3a003bc17923a8c1268fb74928e854edf12c207c
parent3fe80370a8533122c1ea88a389f345f77f607631 (diff)
parent7a1f6f80e10826040aed0cc5ec1963ec7b7a092d (diff)
downloadperlweeklychallenge-club-bd9e1aca68bfc077ce2d88506d24702d3b4bdc6c.tar.gz
perlweeklychallenge-club-bd9e1aca68bfc077ce2d88506d24702d3b4bdc6c.tar.bz2
perlweeklychallenge-club-bd9e1aca68bfc077ce2d88506d24702d3b4bdc6c.zip
Merge pull request #12566 from ash/ash-335
Task 2 Week 335 in Raku by @ash
-rw-r--r--challenge-335/ash/raku/ch-2.raku75
1 files changed, 75 insertions, 0 deletions
diff --git a/challenge-335/ash/raku/ch-2.raku b/challenge-335/ash/raku/ch-2.raku
new file mode 100644
index 0000000000..cbf279e78d
--- /dev/null
+++ b/challenge-335/ash/raku/ch-2.raku
@@ -0,0 +1,75 @@
+# Task 2 of the Weekly Challenge 335
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-335/#TASK2
+
+# $ raku ch-2.raku
+# [A _ _]
+# [_ A _]
+# [B B A]
+# A
+# [A A B]
+# [A B _]
+# [B _ _]
+# B
+# [A A B]
+# [B B A]
+# [A B A]
+# Draw
+# [A _ _]
+# [_ B _]
+# [_ _ _]
+# Pending
+# [B B B]
+# [A A _]
+# [_ _ A]
+# B
+
+say outcome [0,0], [2,0], [1,1], [2,1], [2,2];
+say outcome [0,0], [1,1], [0,1], [0,2], [1,0], [2,0];
+say outcome [0,0], [1,1], [2,0], [1,0], [1,2], [2,1], [0,1], [0,2], [2,2];
+say outcome [0,0], [1,1];
+say outcome [1,1], [0,0], [2,2], [0,1], [1,0], [0,2];
+
+
+sub outcome(*@moves) {
+ my @field = fill(@moves);
+ .say for @field;
+
+ return winner(@field);
+
+ sub fill(@moves) {
+ my @field = ['_' xx 3] xx 3;
+
+ my $who = 'A';
+ for @moves -> $x, $y {
+ @field[$x][$y] = $who;
+ $who = $who eq 'A' ?? 'B' !! 'A';
+ }
+
+ return @field;
+ }
+
+ sub winner($field) {
+ return 'A' if is-winner($field, 'A');
+ return 'B' if is-winner($field, 'B');
+
+ return $field.any.grep('_').elems ?? 'Pending' !! 'Draw';
+ }
+
+ sub is-winner($f, $p) {
+ # rows
+ for 0..2 -> $r {
+ return True if $f[$r].map(* eq $p).all;
+ }
+
+ # columns
+ for 0..2 -> $c {
+ return True if (0..2).map({ $f[$_][$c] eq $p }).all;
+ }
+
+ # diagonals
+ return True if (0..2).map({ $f[$_][$_] eq $p }).all;
+ return True if (0..2).map({ $f[$_][2-$_] eq $p }).all;
+
+ return False
+ }
+}