diff options
| author | Andrew Shitov <mail@andreyshitov.com> | 2025-08-24 23:43:47 +0200 |
|---|---|---|
| committer | Andrew Shitov <mail@andreyshitov.com> | 2025-08-24 23:43:47 +0200 |
| commit | a0e34f60be3b7a915645df8ac9948b1404c43900 (patch) | |
| tree | 6c7d8fc2f9f4bab6069fd24bef12bba72bcea527 | |
| parent | 75e0981094942a8ee145b56543ad7219c3000aa4 (diff) | |
| download | perlweeklychallenge-club-a0e34f60be3b7a915645df8ac9948b1404c43900.tar.gz perlweeklychallenge-club-a0e34f60be3b7a915645df8ac9948b1404c43900.tar.bz2 perlweeklychallenge-club-a0e34f60be3b7a915645df8ac9948b1404c43900.zip | |
Task 2
| -rw-r--r-- | challenge-335/ash/raku/ch-2.raku | 53 |
1 files changed, 53 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..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 + } +} |
