final caribeña - ICPChallenge
THE INTERNATIONAL COLLEGIATE PROGRAMMING CONTEST (ICPC)
THE 2019 ICPC LATIN-AMERICAN REGIONAL CONTESTS - CARIBBEAN FINALS
The 7th Caribbean Tournament of Virtual Players "ICPChallenge"
The tournament consists of programming virtual players able of autonomous game playing, i.e. without human interaction. Every 2019 ICPC Caribbean finalist team may submit one virtual player implementation. A virtual player must be implemented in Java language (JDK 11 | Windows/x64 Java Development Kit | Linux/x64 Java Development Kit) using a single file containing the source code describing a single class. To submit a virtual player, the source code must be sent to the address email@example.com untill November 5th. The message's subject format: ICPChallenge "team official name" (i.e.: ICPChallenge UH++).
The tournament will run a preliminary round using the Round-Robin system (all vs. all, each player will have two matches against the same opponent), for advancing to the Semi-Finals (SF) the 4 players with better amount of wins (in case of ties, players with higher scores -accumulated points in all matches- will get better ranks). Then take place the SF crosses (first vs. fourth and second vs. third). The SF matches are sudden death (direct elimination, only one match). The winner team of each SF will face in the Grand Final (only one match will determine the 2019 ICPChallenge champion team).
The general dynamics of the ICPC Domino game was designed to be easy to use and easy to understand. In this sense it can be quickly described as a domino play, with 28 tiles from 0 to 6 (see for specific variations on next sections).
Be the first player to run out of tiles or accumulate as many points as possible. The winner of each match will receive additional 1000 points.
The points can be scored during the game, by several ways:
- The sum of the extremes is a multiple 5. In this case, that sum will be added to the score.
- The opposing player have no chance to play. In this case 10 points will be added.
- In case of win, 1000 points are added to the player's score.
At the game's start, fourteen (14) tiles are distributed to each player. The game begins with the player designated as Player no. 1.
In each turn, the player must place one of his available tiles on one of the two open extremes. The points on one side of the piece must be equal to the points on the extreme where it's being placed.
Once the player has placed the tile in place, his turn ends and the next player must play.
If a player cannot play, the turn must be "passed" to the next player.
In each iteration the players can place their tiles until one of the following situations arises:
- Domino. When a player places his last piece on the table, that player is said to have dominated the game. The winner player will earn the accumulative points of all his opponents, plus 1000 points.
- Closed. When none of the players can continue the game. This happens when the numbers at the extremes have been played 7 times. In this case, the game is closed and the player with the higher score (accumulated points) is declared as the match winner. If both players have the same number of points, players will count the points of the tiles they have left and the player with the fewest points is the winner and adds up the points in the usual way. In case of tie (same amount of points in the remaining tiles) the player with fewer tiles is the winner. If the tie persist (same amount of remaining tiles), the loser will be the player who start the game, assuming that this player has an initial advantage.
Running the command line
java -jar uci.challenge.jar (JDK 11 | Windows/x64 Java Development Kit | Linux/x64 Java Development Kit) will shown a window where you can choose two implemented strategies, and play.
IMPLEMENTING A NEW PLAYER
The uci.challenge library allows the competition between virtual players that can be implemented using the library itself.
To create a new tactic it is only needed to write a class that implements the interface uci.challenge.Player.Player. This interface contains the methods needed for the execution, each of them is identified in the documentation.
The implementation of a demonstration class is also available.