Vous êtes un globe de boue. Naturellement, étant visqueux, vous voulez suinter le plus de surface possible. Mais il y a 3 autres slimes qui veulent faire exactement la même chose. Qui sera le slime supérieur?
La description
Tous les slimes seront rassemblés dans une arène. Les juges (c'est-à-dire le programme de contrôle) passeront en revue une liste exhaustive de toutes les combinaisons possibles de 4 slimes, les placeront aux coins d'une table et observeront pour voir quel slime suinte sur la plus grande surface.
Vos slimes peuvent effectuer l'une des 3 actions à chaque tour: étaler, sauter ou fusionner. Une description plus détaillée de leur signification sera fournie dans la section Résultats .
Board / Arena
L'arène sera un plateau carré (actuellement 8x8, mais cela pourrait changer à l'avenir). Voici un exemple d'arène d'un jeu en cours:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Slime est représenté par les nombres 1 à 4 (joueurs 1 à 4), et l'espace vide est représenté par un point ( .
). Initialement, le plateau commence comme tout espace vide à l'exception d'une seule unité de slime du joueur 1 dans le coin supérieur gauche, du joueur 2 en haut à droite, du joueur 3 en bas à gauche et du joueur 4 en bas à droite.
Les coordonnées sont représentées par un index de ligne et de colonne basé sur 0, pour plus de lisibilité dans le code. Par exemple, les coordonnées (3, 6) représentent le 7e carré de la 4e ligne (dans l'exemple ci-dessus, a 4
). (Cela facilite l'accès aux carrés:. board[coords.x][coords.y]
) Voici une illustration visuelle:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Contribution
L'entrée de votre programme sera le joueur que vous êtes (1, 2, 3 ou 4), une virgule ( ,
), puis le contenu du plateau / de l'arène (avec les nouvelles lignes remplacées par des virgules). Par exemple, si vous étiez le joueur 3 dans le scénario ci-dessus, votre entrée serait:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Production
Votre programme doit produire 4 entiers. Les deux premiers sont respectivement l'index de ligne et de colonne du slime que vous souhaitez déplacer, et les deux suivants sont l'index de ligne et de colonne de l'endroit où vous souhaitez les déplacer.
Vous avez trois choix à chaque tour: étaler, sauter ou fusionner.
Propager
Pour se propager, les coordonnées cibles doivent être exactement à un carré de la boue déplacée, et le carré aux coordonnées cibles doit être un espace vide. Lors de l'étalement, un nouveau slime est créé aux coordonnées cibles et l'ancien slime n'est pas supprimé. Une fois le nouveau slime créé, tous les slimes ennemis dans les 8 cases autour de ce nouveau slime sont convertis en joueur qui s'est déplacé.
Par exemple, avec le plateau de la figure 1, si le joueur 1 devait sortir
0 1 1 2
, le résultat serait le plateau de la figure 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Sauter
Pour sauter, les coordonnées cibles doivent être exactement à deux carrés du slime déplacé, et le carré aux coordonnées cibles doit être un espace vide. Lors du jupming, un nouveau slime est créé aux coordonnées cibles et l'ancien slime est supprimé. Une fois le nouveau slime créé, tous les slimes ennemis dans les 8 cases autour de ce nouveau slime sont convertis en joueur qui s'est déplacé.
Par exemple, avec le plateau de la figure 1, si le joueur 1 devait sortir
0 1 2 3
, le résultat serait le plateau de la figure 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Fusionner
Pour fusionner, les coordonnées cibles doivent être exactement à une case du slime déplacé, et le carré aux coordonnées cibles doit être le slime du même joueur. Lors de la fusion, l'ancien slime est supprimé. Ensuite, tous les espaces vides dans les 8 cases autour de la boue cible sont convertis en joueur qui s'est déplacé (sans compter l'ancienne boue déplacée).
Par exemple, avec le plateau de la figure 1, si le joueur 1 devait sortir
0 1 1 2
, le résultat serait le plateau de la figure 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Vous pouvez également passer, en sortant simplement des coordonnées invalides (ex. 0 0 0 0
).
Règles et contraintes
Les règles supplémentaires sont les suivantes:
- Vous pouvez lire et écrire des fichiers dans votre propre dossier afin de conserver les données (les soumissions seront stockées dans
players/YourBotName/yourBotName.language
), mais vous ne pouvez pas modifier ou accéder à autre chose en dehors de celui-ci. L'accès à Internet est interdit. - Votre soumission peut ne pas être codée spécifiquement pour aider ou blesser une autre soumission. (Vous pouvez avoir plusieurs soumissions, mais elles ne doivent en aucun cas interagir spécifiquement les unes avec les autres.)
- Votre soumission ne doit pas prendre plus de 0,1 seconde par tour. Si votre soumission prend parfois 0,105 seconde, ce n'est pas grave, mais cela peut ne pas prendre systématiquement beaucoup plus de temps que ce délai. (Il s'agit principalement d'un test de santé mentale pour éviter que les tests ne prennent trop de temps.)
- Votre soumission ne doit pas être un double exact (c'est-à-dire utiliser exactement la même logique) d'une autre, même si elle est dans une langue différente.
- Votre soumission doit être sérieuse. Ceci est basé sur l'opinion, mais si votre soumission n'essaye clairement pas de résoudre le défi (ex. Si vous passez chaque tour), elle sera disqualifiée.
Si votre soumission enfreint l'une de ces règles ou ne respecte pas les spécifications, elle sera disqualifiée, supprimée de playerlist.txt
et le jeu redémarrera depuis le début. Si votre soumission est disqualifiée, je laisserai un commentaire sur votre message expliquant pourquoi. Sinon, votre soumission sera ajoutée au classement. (Si vous ne voyez pas votre soumission dans le classement, que vous n'avez pas de commentaire explicatif sur votre message et que vous avez posté votre soumission avant l'heure "Dernière mise à jour" ci-dessous, dites-le-moi! Je l'ai peut-être négligée par inadvertance.)
Dans votre entrée, veuillez inclure:
- Un nom.
- Une commande shell pour exécuter votre programme (par exemple,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, etc.).- Notez que l'entrée (votre lecteur et votre carte) sera ajoutée à cela comme argument de ligne de commande.
- Les programmes seront testés sur Ubuntu 14.04, alors assurez-vous que votre code peut y être exécuté (librement).
- Un numéro de version, si votre code fonctionne différemment sur différentes versions de votre langue.
- Le code de votre bot.
- Des instructions sur la façon de compiler le code, si nécessaire.
Code / test du contrôleur, exemple de bot
Le code du contrôleur est écrit en C ++ et peut être trouvé sur Github . Vous trouverez des instructions supplémentaires sur la façon d'exécuter et de tester votre code.
simplebot.rb
, un bot très simple qui propage ou saute un slime aléatoire à un endroit aléatoire à chaque tour, est également publié sur Github .
Score et classement
Lorsque toutes les cases du plateau sont remplies, la partie se termine et les scores sont calculés. Le score final d'un joueur est le nombre de cases qui contiennent leur vase à la fin de la partie. Si 2000 tours se sont écoulés (500 pour chaque joueur) et que la partie n'est toujours pas terminée, la partie se terminera quand même et les scores seront rapportés comme si la partie était terminée.
À la fin du tournoi, les scores de tous les matchs seront calculés en moyenne pour calculer le score final de chaque joueur, qui sera affiché dans le classement. Il n'y a pas de date limite de soumission; Je continuerai de mettre à jour le classement régulièrement à mesure que de nouvelles soumissions arrivent.
4 soumissions sont requises jusqu'à ce qu'un véritable classement apparaisse.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Dernière mise à jour: 22 juillet 22h27 (UTC).