Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #160 from codeconnector/add-2021-09-21-challenge
Add 2021 09 21 challenge
- Loading branch information
Showing
5 changed files
with
162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
# Find Winner on a Tic Tac Toe Game | ||
|
||
Tic-tac-toe is played by two players A and B on a 3 x 3 grid. | ||
|
||
Here are the rules of Tic-Tac-Toe: | ||
|
||
Players take turns placing characters into empty squares `(" ")`. | ||
The first player A always places "X" characters, while the second player B always places "O" characters. | ||
"X" and "O" characters are always placed into empty squares, never on filled ones. | ||
The game ends when there are 3 of the same (non-empty) character filling any row, column, or diagonal. | ||
The game also ends if all squares are non-empty. | ||
No more moves can be played if the game is over. | ||
Given an array moves where each element is another array of size 2 corresponding to the row and column of the grid where they mark their respective character in the order in which A and B play. | ||
|
||
Return the winner of the game if it exists (`A` or `B`), in case the game ends in a draw return `"Draw"`, if there are still movements to play return `"Pending"`. | ||
|
||
You can assume that moves is valid (It follows the rules of Tic-Tac-Toe), the grid is initially empty and A will play first. | ||
|
||
|
||
|
||
### Example 1: | ||
|
||
``` | ||
Input: moves = [[0,0],[2,0],[1,1],[2,1],[2,2]] | ||
Output: "A" | ||
Explanation: "A" wins, he always plays first. | ||
[X][ ][ ] | ||
[ ][ ][ ] | ||
[ ][ ][ ] | ||
[X][ ][ ] | ||
[ ][ ][ ] | ||
[O][ ][ ] | ||
[X][ ][ ] | ||
[ ][X][ ] | ||
[O][ ][ ] | ||
[X][ ][ ] | ||
[ ][X][ ] | ||
[O][O][ ] | ||
[X][ ][ ] | ||
[ ][X][ ] | ||
[O][O][X] | ||
``` | ||
|
||
### Example 2: | ||
``` | ||
Input: moves = [[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]] | ||
Output: "B" | ||
Explanation: "B" wins. | ||
[X][X][O] | ||
[X][O][ ] | ||
[O][ ][ ] | ||
``` | ||
|
||
### Example 3: | ||
|
||
``` | ||
Input: moves = [[0,0],[1,1],[2,0],[1,0],[1,2],[2,1],[0,1],[0,2],[2,2]] | ||
Output: "Draw" | ||
Explanation: The game ends in a draw since there are no moves to make. | ||
[X][X][O] | ||
[O][O][X] | ||
[X][O][X] | ||
``` | ||
|
||
### Example 4: | ||
|
||
``` | ||
Input: moves = [[0,0],[1,1]] | ||
Output: "Pending" | ||
Explanation: The game has not finished yet. | ||
[X][ ][ ] | ||
[ ][O][ ] | ||
[ ][ ][ ] | ||
``` | ||
|
||
|
||
### Constraints: | ||
|
||
``` | ||
1 <= moves.length <= 9 | ||
moves[i].length == 2 | ||
0 <= moves[i][j] <= 2 | ||
There are no repeated elements on moves. | ||
moves follow the rules of tic tac toe. | ||
``` | ||
|
||
### Prerequisites | ||
|
||
Ruby > 2.0 | ||
|
||
[bundler](https://bundler.io/) | ||
|
||
|
||
From the `solutions/ruby` folder with | ||
``` | ||
bundle install | ||
# run the tests with | ||
ruby -I lib:test tic_tac_test.rb --verbose | ||
``` |
5 changes: 5 additions & 0 deletions
5
challenges/2021-09-20-tic-tac-toe-winner/solutions/ruby/Gemfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# frozen_string_literal: true | ||
|
||
source "https://rubygems.org" | ||
|
||
gem 'minitest' |
15 changes: 15 additions & 0 deletions
15
challenges/2021-09-20-tic-tac-toe-winner/solutions/ruby/Gemfile.lock
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
GEM | ||
remote: https://rubygems.org/ | ||
specs: | ||
minitest (5.14.4) | ||
rake (13.0.6) | ||
|
||
PLATFORMS | ||
ruby | ||
|
||
DEPENDENCIES | ||
minitest | ||
rake | ||
|
||
BUNDLED WITH | ||
2.1.4 |
5 changes: 5 additions & 0 deletions
5
challenges/2021-09-20-tic-tac-toe-winner/solutions/ruby/mob.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# frozen_string_literal: true | ||
|
||
def who_wins(board) | ||
|
||
end |
30 changes: 30 additions & 0 deletions
30
challenges/2021-09-20-tic-tac-toe-winner/solutions/ruby/tic_tac_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'minitest/autorun' | ||
require './mob' | ||
|
||
describe 'who_wins' do | ||
it 'returns the winner of board1' do | ||
board1 = [[0, 0], [2, 0], [1, 1], [2, 1], [2, 2]] | ||
|
||
_(who_wins(board1)).must_equal 'A' | ||
end | ||
|
||
it 'returns the winner for board2' do | ||
board2 = [[0, 0], [1, 1], [0, 1], [0, 2], [1, 0], [2, 0]] | ||
|
||
_(who_wins(board2)).must_equal 'B' | ||
end | ||
|
||
it "returns 'Draw' for board3" do | ||
board3 = [[0, 0], [1, 1], [2, 0], [1, 0], [1, 2], [2, 1], [0, 1], [0, 2], [2, 2]] | ||
|
||
_(who_wins(board3)).must_equal 'Draw' | ||
end | ||
|
||
it "returns 'Pending' for board4" do | ||
board4 = [[0, 0], [1, 1]] | ||
|
||
_(who_wins(board4)).must_equal 'Pending' | ||
end | ||
end |