Anaconda: Tic-Tac-Toe Coding Challenge
Your mission, should you choose to accept it, is to implement a two-player game of Tic-tac-toe in the web browser.
Rules
HONOR RULES: You must do this challenge on your own, without assistance or review from others, and without copying from the Internet. You will be asked to affirm that you developed your work independently.
TIME LIMIT: You have 3 days from the date you receive a link to this site. You may submit your work earlier.
TASK: Your task it implement a simple but comprehensive REST API for a tic-tac-toe game
Requirements
The basic requirements for the game are:
- store a game board data structure that contains the game information
- allow two players to enter their names, and automatically assign one of them the circle and the other the 'x'
- allow each to play a turn, one at a time, during which the player selects a square of the board and it is filled in with their symbol
- indicate when one of the players has won, or the game is a draw In addition to implementing basic gameplay, the user must be able to save their game to the server.
Since this is a coding challenge, the success of your mission depends on building a good rest API implementation.
Make sure to provide instruction about how to setup, run and consume your REST API.
Technologies
We prefer Python and the tornado framework, but they are not required. You can use whatever technology you prefer.
##Game data structure ###A game consists of:
- two players, represented by their names as strings
- a board data structure (we are leaving you the choice of what data structure is more appropriate for the task). Keep in mind that this data structure needs to track the status of each board element. Each element is null if the square is blank, or either 0 or 1 to indicate which player controls the square.
Server API The server should complies with the JSON API specification.
-
GET /api/games
: Return a list of the Games known to the server, as JSON. -
POST /api/games
: Create a newGame
, assigning it an ID and returning the newly createdGame
. -
GET /api/games/<id>
: Retrieve aGame
by its ID, returning a404
status code if no game with that ID exists. -
POST /api/games/<id>
: Update theGame
with the given ID, replacing its data with the newlyPOST
ed data.
Optional
If you have extra time and want to take on an additional challenge, you may choose to implement:
- viewing & restoring saved games
- an "AI" player option, where someone can play against the computer
However, please be aware that we'd prefer a more polished implementation to more features!
Submission
When you are ready, please submit your challenge as a pull request against this repository.