From a0e34f60be3b7a915645df8ac9948b1404c43900 Mon Sep 17 00:00:00 2001 From: Andrew Shitov Date: Sun, 24 Aug 2025 23:43:47 +0200 Subject: Task 2 --- challenge-335/ash/raku/ch-2.raku | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 challenge-335/ash/raku/ch-2.raku diff --git a/challenge-335/ash/raku/ch-2.raku b/challenge-335/ash/raku/ch-2.raku new file mode 100644 index 0000000000..25bed9e1c6 --- /dev/null +++ b/challenge-335/ash/raku/ch-2.raku @@ -0,0 +1,53 @@ +# Task 1 of the Weekly Challenge 335 +# https://theweeklychallenge.org/blog/perl-weekly-challenge-335/#TASK1 + +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; + + False + } +} -- cgit From e5d345a2b2740e9557c60ef7550a146202efb731 Mon Sep 17 00:00:00 2001 From: Andrew Shitov Date: Sun, 24 Aug 2025 23:45:06 +0200 Subject: Sample output --- challenge-335/ash/raku/ch-2.raku | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/challenge-335/ash/raku/ch-2.raku b/challenge-335/ash/raku/ch-2.raku index 25bed9e1c6..ea6605fc27 100644 --- a/challenge-335/ash/raku/ch-2.raku +++ b/challenge-335/ash/raku/ch-2.raku @@ -1,5 +1,27 @@ -# Task 1 of the Weekly Challenge 335 -# https://theweeklychallenge.org/blog/perl-weekly-challenge-335/#TASK1 +# 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]; -- cgit From 7a1f6f80e10826040aed0cc5ec1963ec7b7a092d Mon Sep 17 00:00:00 2001 From: Andrew Shitov Date: Sun, 24 Aug 2025 23:45:58 +0200 Subject: return value --- challenge-335/ash/raku/ch-2.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-335/ash/raku/ch-2.raku b/challenge-335/ash/raku/ch-2.raku index ea6605fc27..cbf279e78d 100644 --- a/challenge-335/ash/raku/ch-2.raku +++ b/challenge-335/ash/raku/ch-2.raku @@ -70,6 +70,6 @@ sub outcome(*@moves) { return True if (0..2).map({ $f[$_][$_] eq $p }).all; return True if (0..2).map({ $f[$_][2-$_] eq $p }).all; - False + return False } } -- cgit