ROTA Challenge

A Classic Game of Ancient Rome.


The ancient Roman game of ROTA is easy to learn, quick to play. It makes a great game for new recruits that teaches planning ahead and the points of the compass.

We don't actually know the Roman name for it, but scholars call it ROTA, Latin for "wheel." ROTA boards were painted, scratched or scribbled everywhere that Romans went. It probably kept a lot of bored Roman soldiers busy.

Scholars guess that ROTA is a three-in-a-row game like tic-tac-toe. They have reconstructed the rules based on medieval games that look a lot like it. Just like tic-tac-toe? Not so fast! ROTA can never end in a tie.


When you complete this challenge, please send a copy of your resume along with all hash values you collected and any code used in the challenges to: careers@praetorian.com

I'll explain how to play the game, then you'll get a chance to experience the real game.

ROTA board

Set-Up For a Game of ROTA (2 players)

  1. First, draw a circle. Draw a plus sign in it [+] and then an [X].
  2. Draw dots at the end of each line and in the middle where they cross.
  3. Now you'll need pieces (different colors for each player).
  4. Each player gets THREE pieces.

The Rules for the Game of ROTA

  1. Each turn, players can put one piece on the board in any open spot.
  2. After all three pieces are on the board, a player must move one piece each turn.
  3. A piece may move along any line or curving edge of the circle to the next empty spot.
  4. A piece may not jump other pieces nor move more than one spot.
  5. The first person to get three in a row wins.*

Take some time and explore the game of ROTA. Use this time to get comfortable with the rules and develop a strategy for your final challenge. Oh, and that's not a graphic below... it's a playable instance of the game—have fun!

Pssst... By the Way: Really good players of Rota can keep the game going forever.

The object of the final challenge is to play 50 consecutive thirty-move games against our ROTA AI without losing.

To interact with the ROTA web service, GET requests are sent to:

http://rota.praetorian.com/rota/service/play.php

  • The game starts out when the player sends a request for a new game.
  • The game session between the player and computer begins as soon as request is made.
  • The objective is to play 50 consecutive games against the computer. Each game must be at least thirty-moves. The placement of a piece is not considered a move. Remember, a hash will be sent in the data response field. Make sure you stay on the lookout for this value and keep it safe.
  • Giant switch statements are cumbersome and discouraged. You are an engineer. We believe you can come up with something a bit more sophisticated.
  • Please send a copy of your resume along with all the hash values you have collected and any code used in the challenges to: careers@praetorian.com
Note: Successful requests (the correct use of placing a piece or moving a piece) must be made within a certain time limit or the session time restarts and a new game must be requested

Request Values:

Use request values to tell the computer what you want to do, for example:

http://rota.praetorian.com/rota/service/play.php?request=new


Use the following parameters as reference when interacting with the web service:

Name Description
new

Restart a game. In doing so you will create a new game and restart the timer for game length. This request can be made at any point.


Example: http://rota.praetorian.com/rota/service/play.php?request=new

place

Place a new piece on the board. This request can only be made during the first three moves of each player's turns.

Use the location parameter in conjunction with place with a value between 1-9


Example: http://rota.praetorian.com/rota/service/play.php?request=place&location=3

move

Use the move parameter when moving a current piece from one location to another. This request can only be made after the player has placed all 3 pieces on the board. Include both the from and to parameters when moving a piece on the board. The value must be an integer between 1-9.


Example: http://rota.praetorian.com/rota/service/play.php?request=move&from=3&to=4

status

Returns the current status of the session which includes board status, computer wins, and player wins. This request can be made at any time, but does not reset the timer between successful requests.


Example: http://rota.praetorian.com/rota/service/play.php?request=status

next

Increases the games_won count and resets the moves count. This endpoint will kill a game if it is called prior to a 30 move game.


Example: http://rota.praetorian.com/rota/service/play.php?request=next

Return Values:

All web service responses are in a JSON format. Every server response will include the updated game board with the computer's next move if the prior request involved a player move.

Name Description
status

Specifies whether the request was successfully executed. If the request did not go through it will fail and an explanation is given in the response data. A success is returned if the request does go through and is properly executed.

Success {"status":"success","data":{"board":"---------","player_wins":0,"computer_wins":0}}

Fail {"status":"fail","data":{"request":"No game available. Please start a new game by using the \"new\" request."}}

data

Contains the responses data which may include: board layout, computer_wins count, player_wins count, moves count, games_won, and hash (which is given after one hours of continuous play)

The board layout

The board will be returned as a string, where each position corresponds to a position on the board. Board positioning is as follows:

1 2 3

4 5 6     each position has a number 1-9

7 8 9


- represents an empty space

c represents a space occupied by a computer piece

p represents a space occupied by a player piece

To help get you started, we've included basic Ruby code needed to interact with and solve this challenges.