Résultats finaux disponibles
introduction
Après mon précédent KOTH avec des thèmes lourds ( guerre fantastique , pandémie mondiale ...), je suis de retour avec un nouveau jeu léger. Cette fois, vous vous retrouvez face à une situation de "jeu de société". Une pile de pièces à l'envers est placée au centre d'une très grande table, et vous êtes déterminé à obtenir votre part du butin!
Glossaire
Pièces : jetons qui peuvent être retournés ou non.
Non retourné : pièces placées sur la table avec leur valeur pointant vers le bas. Il s'agit de l'état par défaut des pièces.
Renversé : pièces placées sur la table avec leur valeur pointant vers le haut.
Local : fait référence à votre pile de pièces.
Global : fait référence à la pile de pièces au centre.
Principe
Au début de la partie, chaque joueur commence avec 0 points et 0 pièces (retournées ou non). Le jeu est au tour par tour. Pendant leur tour, les joueurs peuvent effectuer jusqu'à 3 actions interagissant soit avec la pile de pièces au centre de la table, leur propre pile de pièces ou avec d'autres joueurs.
L'ordre de jeu est défini de manière aléatoire au début de la partie. L'ordre des joueurs dans la liste d'arguments représente l'ordre du tour, et il va de gauche à droite dans cette liste. "Suivant" et "Précédent" se réfèrent respectivement à "à droite dans cette liste" et "à gauche dans cette liste" avec une boucle si vous êtes le dernier de chaque côté.
Le jeu dure 50 tours ou jusqu'à ce qu'il y ait 0 pièces au centre à la fin d'un tour de joueur (ce qui signifie que vous terminerez vos 3 actions même si la pile est vide après votre première action, et vous pouvez remettre des pièces à laisser le jeu continue). Le nombre de pièces mondiales de départ est défini de manière aléatoire avec cette formule:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Chaque action vous rapportera des points (ou vous fera en perdre) et à la fin de la partie, chaque pièce que vous aurez sera ajoutée à vos points ( -1 pour non retourné, +2 pour retourné ). Le joueur avec le score le plus élevé gagne.
Le contrôleur vous fournit une entrée via des arguments de commande, et votre programme doit sortir via stdout.
Syntaxe
Contribution
Chaque fois que votre programme est appelé, il recevra des arguments dans ce format:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Les tours sont indexés 1.
Exemple d'entrée
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Ici, vous voyez que c'est le 6ème round et vous êtes le joueur 2. Il y a 52 pièces dans la pile centrale. Vous avez 12 points, 1 pièce retournée et 0 pièce non retournée. Les points peuvent être négatifs.
Sortie
Vous devez produire trois caractères (pas d'espace, pas de séparateur), qui correspondent chacun à une action que vous effectuerez ce tour-ci. L'ordre des personnages détermine l'ordre des actions. Vous pouvez générer plusieurs fois les mêmes actions. Dans le cas où il n'y a pas assez de pièces pour terminer votre action, il utilisera le maximum de pièces disponibles et ne comptera que les pièces utilisées.
N
: Ne rien faire
1
: Prendre 1 pièce de la pile centrale [Effets: +1 local non retourné / -1 point / -1 global non retourné]
2
: Prendre 2 pièces de la pile centrale [Effets: +2 local non retourné / -2 points / -2 global non retourné]
3
: Prenez 3 pièces de la pile centrale [Effets: +3 local non retourné / -3 points / -3 global non retourné]
A
: Remettez 1 pièce de votre pile [Effets: -1 local non retourné / +1 point / +1 global non retourné]
B
: Remettez 2 pièces de votre pile [Effets: -2 local non retourné / +2 points / +2 global non retourné]
C
: Remettez 3 pièces de votre pile [Effets: -3 local non retourné / +3 points / +3 global unflipped]
X
: Retirez 1 pièce de votre pile[Effets: -1 local non retourné / 0 point]
Y
: Retirez 2 pièces de votre pile [Effets: -2 local non retourné / 0 point]
Z
: Retirez 3 pièces de votre pile [Effets: -3 local non retourné / 0 point]
R
: Faites pivoter les pièces au joueur précédent [Effets: -1 point par reçu non retourné, +2 points par reçu retourné / s'applique à tous les joueurs]
T
: Tournez les pièces vers le joueur suivant [Effets: -1 point par reçu non retourné, +2 points par reçu retourné / s'applique à tous les joueurs]
F
: lancer 1 pièce [Effets: -1 local non retourné / +1 local retourné / +2 point]
U
: défaire 1 pièce [Effets: +1 local non retourné / -1 local retourné / -2 point]
Exemple de sortie
2FF
: Prend deux pièces et lance deux pièces, marquant -2 + 2 + 2 = 2 points
Si votre sortie est incorrecte, le contrôleur assumera NNN
.
Manette
Vous pouvez trouver le contrôleur sur GitHub . Il contient également deux exemples de robots, écrits en Java. Pour le faire fonctionner, consultez le projet et ouvrez-le dans votre IDE Java. Le point d'entrée dans la main
méthode de la classe Game
. Java 8 requis.
Pour ajouter des bots, vous devez d'abord avoir la version compilée pour Java (fichiers .class) ou les sources des langages interprétés. Placez-les dans le dossier racine du projet. Ensuite, créez une nouvelle classe Java dans le players
package (vous pouvez prendre exemple sur les bots déjà existants). Cette classe doit implémenter Player
pour remplacer la méthode String getCmd()
. La chaîne renvoyée est la commande shell pour exécuter vos bots. Vous pouvez par exemple faire un travail de robot Ruby avec cette commande: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Enfin, ajoutez le bot dans le tableau des joueurs en haut de la Game
classe.
Règles
- Les bots ne doivent pas être écrits pour battre ou soutenir d'autres bots spécifiques.
- L'écriture dans des fichiers est autorisée. Veuillez écrire à "votrenomdemission.txt", le dossier sera vidé avant le début du jeu. D'autres ressources externes sont interdites.
- Votre soumission a 1 seconde pour répondre.
- Fournissez des commandes pour compiler et exécuter vos soumissions.
Langues prises en charge
Je vais essayer de prendre en charge toutes les langues, mais elles doivent être disponibles en ligne gratuitement. Veuillez fournir des instructions pour l'installation si vous n'utilisez pas un langage "courant".
En ce moment, je peux exécuter: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Résultats finaux
Ce sont les résultats de 100 matchs (les points sont additionnés):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Les résultats individuels des jeux sont disponibles ici: http://pasted.co/63f1e924 (avec les pièces de départ et le nombre de tours par partie).
Une récompense de 50 réputations est attribuée au lauréat: Bird In The Hand de Martin Büttner .
Merci à tous pour votre participation, à la prochaine KOTH ~