diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-08-25 01:49:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-25 01:49:12 +0100 |
| commit | bd9e1aca68bfc077ce2d88506d24702d3b4bdc6c (patch) | |
| tree | 3a003bc17923a8c1268fb74928e854edf12c207c | |
| parent | 3fe80370a8533122c1ea88a389f345f77f607631 (diff) | |
| parent | 7a1f6f80e10826040aed0cc5ec1963ec7b7a092d (diff) | |
| download | perlweeklychallenge-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.raku | 75 |
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 + } +} |
