sheesh, est-ce vraiment le 4? Pour tous les anciens, le défi principal est le même, mais nous utilisons Java au lieu d'un langage personnalisé. Voici les trois derniers défis CodeBot , au cas où vous seriez intéressé.
Le but de CodeBots est de rendre votre bot aussi viral que possible . Chaque bot porte un drapeau, et vous devez vous assurer que votre drapeau est partout .
API
Les bots suivront un "protocole" normalisé, et les bots progresseront de manière synchrone:
IPAddress selectMessageRecipient()
permet à un bot de choisir à qui il veut envoyer un message "amical".Message sendMessage()
permet à un bot de choisir le contenu du message qu'il enverra.processMessage(IPAddress, Message)
est appelé pour chaque message reçu par un bot.FunctionType selectFunctionToBlock()
empêche une fonction d'être écrasée pour le tour en cours. Voir l'étape 7.IPAddress selectAttackTarget()
permet à un bot de choisir qui il veut DDOS. Une attaque DDOS réussit si le bot est ciblé par 3 bots en même temps. Si une attaque réussit, chacun des attaquants peut effectuer les étapes 6 et 7.readData(ReadonlyBot)
permet à un bot de lire les données stockées sur le bot vulnérable.FunctionType selectFunctionToReplace()
est le nœud de ce défi . Vous êtes autorisé à sélectionner 1 fonction (parmi les 8 répertoriées ici) pour copier de votre bot vers son bot. Ensuite, votre fonction sera appelée à la place de la leur . Si plusieurs bots sélectionnent la même fonction, une aléatoire sera réussie.String getFlag()
est appelé à la fin du jeu et doit renvoyer une chaîne unique à votre soumission. Votre fonction doit toujours renvoyer la même chaîne. La soumission avec le plus de drapeaux à la fin du jeu gagne.
Espace de rangement
Vous avez 3 formes de stockage, un carnet d' adresses , un journal et des variables . Ces formes de stockage sont locales au bot sur lequel votre fonction est exécutée (donc si votre fonction est copiée, le contenu de chacun de ces objets sera différent). Tous ces objets peuvent être modifiés ou effacés manuellement. Pour obtenir ces objets, vous avez un getter dans votre classe (par exemple getLog()
).
Le Carnet d' adresses stocke une liste de IPAddress , chacun avec un AddressType , ce qui vous permet de classer les différents types d'adresses. Le carnet d'adresses contiendra toujours au moins 1 adresse (si elle est effacée, une adresse aléatoire sera ajoutée). Effacement de votre Carnet d' adresses pour obtenir plusieurs IPAddresses n'est pas autorisé.
Le journal stocke une liste de toutes les actions entreprises, ainsi que des données sur l'action. Il comprend également un historique de toutes les attaques réussies (bien que vous ne sachiez pas quelles fonctions elles ont écrasées)
L' objet Variables vous permet de stocker des variables de chaîne attachées à un nom de chaîne. Au début du jeu, les variables contiendront une seule variable, ID
qui contient un ID généré de manière aléatoire qui est unique à votre type de bot.
Vous disposez également d'autres fonctions d'accès:
int getTurnNumber()
renvoie un entier avec le tour en coursbool functionsMatch(ReadonlyBot, FunctionType)
des tests pour voir si la fonction de ReadonlyBot correspond à la vôtreIPAddress personalAddress()
renvoie votre adresse IP
Comment mettre en œuvre
- Vous pouvez obtenir le code de Github
- Ajoutez votre bot au
\bots
dossier, puis ajoutez une référence à votre bot danscontroller\CodeBotFactory.java
- Votre bot doit étendre
codebots.bot.CodeBot
oucodebots.bots.DefaultCodeBot
- Vous avez besoin de Java 8 si vous souhaitez exécuter le contrôleur.
- Vous pouvez exécuter le code (en supposant que vous êtes dans le
/src
dossier) en utilisantjavac codebots\*.java
pour compiler, puisjava codebots.Main
pour exécuter. - Vous ne pouvez pas avoir de variables membres non constantes dans votre classe
- La réflexion n'est pas autorisée.
- Les formes de communication entre les robots (du même type ou de types différents) en dehors des méthodes énumérées ci-dessus ne sont pas autorisées.
- Les bots stupides et / ou suicidaires sont autorisés, mais tous les bots doivent être fonctionnellement différents des entrées existantes.
- Si vous voulez du hasard dans votre bot, utilisez
getRandom()
- Veuillez essayer de garder votre code efficace. J'ai passé beaucoup de temps à profiler et à rendre le contrôleur rapide.
Les scores
105.2501 Expelliarmus!
104.5803 J'aide!
104.2746 Qui suis-je?
103.8529 Dumb Bot
103.2028 Replacer
102.7045 Chaos
102.4046 Hermit Bot
102.2849 Swarmer
100.5598 Le robot aléatoire vous aime
99.966 Trust in Trust!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Juste votre sympathique robot de livraison de courrier de quartier.
89.4645 null