Meine Güte, ist das wirklich der 4.? Für alle alten Leute ist die Kernherausforderung dieselbe, aber wir verwenden Java anstelle einer benutzerdefinierten Sprache. Hier sind die letzten drei CodeBot- Herausforderungen , falls Sie interessiert sind.
Das Ziel von CodeBots ist es, Ihren Bot so viral wie möglich zu machen . Jeder Bot trägt eine Flagge, und Sie müssen sicherstellen, dass Ihre Flagge überall ist .
API
Die Bots folgen einem standardisierten "Protokoll" und durchlaufen synchron die folgenden Schritte:
IPAddress selectMessageRecipient()
Ermöglicht einem Bot zu wählen, an wen er eine "freundliche" Nachricht senden möchte.Message sendMessage()
Ermöglicht einem Bot, den Inhalt der Nachricht auszuwählen, die er senden wird.processMessage(IPAddress, Message)
wird für jede Nachricht aufgerufen, die ein Bot empfängt.FunctionType selectFunctionToBlock()
Verhindert, dass eine Funktion für die aktuelle Runde überschrieben wird. Siehe Schritt 7.IPAddress selectAttackTarget()
Ermöglicht einem Bot zu wählen, wen er zu DDOS möchte. Ein DDOS-Angriff ist erfolgreich, wenn der Bot von 3 Bots gleichzeitig angegriffen wird. Wenn ein Angriff erfolgreich ist, kann jeder Angreifer die Schritte 6 und 7 ausführen.readData(ReadonlyBot)
Ermöglicht einem Bot das Lesen von Daten, die auf dem anfälligen Bot gespeichert sind.FunctionType selectFunctionToReplace()
ist der Kern dieser Herausforderung . Sie dürfen 1 Funktion (von den 8 hier aufgelisteten) auswählen, um von Ihrem Bot auf ihren Bot zu kopieren. Dann wird Ihre Funktion anstelle ihrer aufgerufen . Wenn mehrere Bots dieselbe Funktion auswählen, ist eine zufällige erfolgreich.String getFlag()
wird am Ende des Spiels aufgerufen und sollte eine eindeutige Zeichenfolge für Ihre Eingabe zurückgeben. Ihre Funktion sollte immer dieselbe Zeichenfolge zurückgeben. Die Einreichung mit den meisten Flaggen am Ende des Spiels gewinnt.
Lager
Sie haben drei Arten des Speichers: ein Adressbuch , ein Protokoll und eine Variable . Diese Speicherformen sind lokal für den Bot, auf dem Ihre Funktion ausgeführt wird (wenn Ihre Funktion kopiert wird, ist der Inhalt jedes dieser Objekte unterschiedlich). Alle diese Objekte können manuell geändert oder gelöscht werden. Um diese Objekte zu erhalten, haben Sie einen Getter in Ihrer Klasse (zB getLog()
).
Das Adressbuch speichert eine Liste von IP-Adressen mit jeweils einem Adresstyp , mit dem Sie die verschiedenen Adresstypen klassifizieren können. Das Adressbuch enthält immer mindestens 1 Adresse (wenn es gelöscht ist, wird eine zufällige Adresse hinzugefügt). Das Löschen Ihres Adressbuchs zum Abrufen mehrerer IP-Adressen ist nicht zulässig.
Das Protokoll speichert eine Liste aller durchgeführten Aktionen sowie Daten zur Aktion. Es enthält auch einen Verlauf aller erfolgreichen Angriffe (obwohl Sie nicht wissen, welche Funktionen sie überschrieben haben).
Mit dem Variablenobjekt können Sie Zeichenfolgenvariablen speichern, die an einen Zeichenfolgennamen angehängt sind. Beim Spielstart enthalten Variablen eine einzelne Variable, ID
die eine zufällig generierte ID enthält, die für Ihren Bot-Typ eindeutig ist.
Sie haben auch andere Zugriffsfunktionen:
int getTurnNumber()
Gibt eine Ganzzahl mit der aktuellen Runde zurückbool functionsMatch(ReadonlyBot, FunctionType)
Überprüft, ob die ReadonlyBot-Funktion mit Ihrer übereinstimmtIPAddress personalAddress()
gibt Ihre IPAdresse zurück
Wie implementieren
- Den Code erhalten Sie von Github
- Fügen Sie Ihren Bot dem
\bots
Ordner hinzu und fügen Sie dann einen Verweis auf Ihren Bot in hinzucontroller\CodeBotFactory.java
- Ihr Bot muss
codebots.bot.CodeBot
oder verlängerncodebots.bots.DefaultCodeBot
- Sie benötigen Java 8, wenn Sie den Controller ausführen möchten.
- Sie können den Code ausführen (vorausgesetzt, Sie befinden sich im
/src
Ordner), indem Siejavac codebots\*.java
compilieren und dannjava codebots.Main
ausführen. - Sie können nicht haben kein nicht-ständiges Mitglied Variablen in der Klasse
- Reflexion ist nicht erlaubt.
- Formen der Kommunikation zwischen Bots (gleichen oder unterschiedlichen Typs) außerhalb der oben aufgeführten Methoden sind nicht zulässig.
- Dumme und / oder Selbstmord-Bots sind erlaubt, aber alle Bots sollten sich funktional von den vorhandenen Einträgen unterscheiden.
- Wenn Sie Zufälligkeit in Ihrem Bot wollen, verwenden Sie
getRandom()
- Bitte versuchen Sie, Ihren Code effizient zu halten. Ich habe viel Zeit damit verbracht, Profile zu erstellen und den Controller schnell zu machen.
Scores
105.2501 Expelliarmus!
104.5803 Ich helfe!
104.2746 Wer bin ich?
103.8529 Dumb Bot
103.2028 Replacer
102.7045 Chaos
102.4046 Hermit Bot
102.2849 Swarmer
100.5598 Zufälliger Bot liebt dich
99.966 Vertrauen in Vertrauen!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Nur Ihr freundlicher Roboter für die Zustellung von Nachbarschaftspost.
89.4645 null