Willkommen bei Code Bots 2!
Sie haben Ihre Lektion seit den letzten Code Bots gelernt. Sie haben versucht, mehr Möglichkeiten zu finden, um mehr Aktionen in weniger Zeilen zu integrieren, und jetzt haben Sie es endlich. Sie werden einen ereignisgesteuerten Code-Bot erstellen.
Ihr Bot muss aus 24 Zeilen bestehen. Jede Zeile folgt einem der beiden Formate:
Condition:Action
oder
Action
Ihr bot auch genügend Speicher 5 ganze Zahlen speichern Namen A
durch E
. Eine Ganzzahl kann Werte von 0 bis 23 speichern.
In jeder Runde führen Sie eine Linie aus C
, es sei denn, eine der Bedingungen ist erfüllt. Wenn ja, dann C
enthält die Zeilennummer der Bedingung, die wahr ist, und dann wird diese Zeile ausgeführt. Am Ende jeder Runde C
wird erhöht.
Es gibt die verfügbaren Bedingungen:
Start
ist nur in der ersten Runde wahr. Sie müssen dies genau einmal in Ihrem Code habenBotAt(N)
ist wahr, wenn sich an der durch N definierten Stelle ein Bot befindetEquals(A,B)
ist wahr, wenn A gleich B ist. Sie können verschiedene Typen sein, wenn ja, sind sie nicht gleich.Modified(A)
ist wahr, wennA
in der letzten Runde kopiert wurde.A
muss ein Variablenname, eine Zeile oder eine Bedingung seinAny(C1,C2,...)
ist wahr, wenn eine der Bedingungen wahr istNone(C1,C2,...)
ist wahr, wenn keine der Bedingungen wahr istAll(C1,C2,...)
ist wahr, wenn alle Bedingungen wahr sindNot(C)
ist wahr, wenn C falsch ist.C
muss eine Bedingung sein.
Variablen können in einem der folgenden Formate vorliegen. Die ersten 9 sind numerisch und können verwendet werden, wenn N auf dieser Seite verwendet wird.
A
,B
,C
,D
,E
- Eine Zahl von 0 bis 23
This
gibt die Zeilennummer zurück, auf der es sich gerade befindetAdd(N1,N2,...)
gibt die Summe aller Werte zurückSub(N1,N2)
gibt N1 minus N2 zurückMult(N1,N2,...)
gibt das Produkt aller Werte zurückDiv(N1,N2)
gibt N1 geteilt durch N2 zurückMod(N1,N2)
wird N1 mod N2 zurückgebenOVar(N)
akzeptiert einen Variablennamen und gibt die Variable des Gegners zurückLine(N)
gibt die N-te Zeile in Ihrem Code zurückType(N)
gibt den N-ten Zeilentyp in Ihrem Code zurück (die Typen sind die Namen der Aktionen)Cond(N)
gibt die Bedingung in der N-ten Zeile zurückCondType(N)
gibt den Bedingungstyp in der N-ten Zeile zurück (die Typen sind die Namen der Bedingungen)OLine(N)
gibt die N-te Zeile im Code Ihres Gegners zurückOType(N)
gibt den N-ten Zeilentyp im Code Ihres Gegners zurückOCond(N)
gibt die Bedingung in der N-ten Zeile zurückOCondType(N)
gibt die Konditionsart in der N-ten Zeile zurück
A
und B
sind für Ihren persönlichen Gebrauch bestimmt, C
werden verwendet, um zu bestimmen, welche Zeile in Ihrem Code ausgeführt werden soll, und D
werden als Richtung verwendet. Jeder Wert von D
bezieht sich auf ein anderes Quadrat- und Richtungspaar. E
erzeugt jedes Mal einen zufälligen Wert. D
und E
wird andernfalls auf einen zufälligen Wert initialisiert 0
.
Die verwendete Richtung wird sein [North,East,South,West][D%4]
. Ihr Gegner ist der Bot auf dem unmittelbaren Feld in dieser Richtung.
Ihnen stehen 4 Aktionen zur Verfügung:
Move
bewegt Sie 1 Feld vorwärts in dieD
th-Richtung. Wenn dort ein Bot ist, werden Sie sich nicht bewegen.Copy(A,B)
kopiert die VariableA
nachB
.B
kann kein numerischer Wert sein, außer für einen Variablennamen.A
undB
kann nicht von verschiedenen Arten sein. Durch das Kopieren einer Zeile wird die Bedingung nicht kopiert.Flag
tut nichts. Der Bot mit den meisten Flags in Ihrem Code erhält einen Punkt. Der Bot mit den meisten Punkten gewinnt.If(C,L1,L2)
führt die Zeile aus,L1
wenn dies derC
Fall ist, andernfalls wird ausgeführtL2
.C
ist eine BedingungL1
undL2
muss Linien sein.
Das große Bild
50 Exemplare jedes Bots werden in die Welt gebracht. Ihr Ziel ist es, Ihre Flagge in so viele Bots wie möglich zu bringen. Für jeden Bot, der mehr von Ihrem Flaggentyp als jeder andere Flaggentyp hat, erhalten Sie einen Punkt.
Die Bots werden wie folgt platziert:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
Es werden 10 Spiele gespielt und die Punkte werden über alle Spiele gemittelt, um zu bestimmen, wer der Gewinner ist.
Randnotizen
Wenn mehrere Bedingungen zutreffen, dann derjenige, der die meisten immedately folgt Start
wird ausgeführt
Die Bots werden dicht gepackt sein, aber Sie werden nicht neben einem anderen Bot starten. (Es wird technisch das gleiche Format wie die letzten CodeBots haben)
Da diese Herausforderung nicht in der Sandbox veröffentlicht wurde (um niemandem einen Vorteil zu verschaffen), behalte ich mir das Recht vor, kleine Details aus Gründen der Fairness oder zusätzlicher Funktionen zu ändern. Wenn der CodeBots-Runner einen Fehler enthält, werde ich ihn ändern, auch wenn ein Bot für seinen Erfolg von diesem Fehler abhängig war. Ich versuche so fair wie möglich zu sein.
Rekursive If
Anweisungen werden nicht ausgeführt
Wenn Ihr Bot kürzer als 24 Zeilen ist, werden die verbleibenden Zeilen mit gefüllt Flag
Denken Sie daran C
, dass beim Kopieren in Ihre eigenen C
am Ende Ihres Zuges erhöht wird.
Den CodeBots-Interpreter finden Sie hier . Es enthält eine JAR-Datei zur einfachen Ausführung. Fügen Sie einfach Ihren Bot zum Bots-Ordner hinzu
Scores
- 893,9 Borg
- 1.3 LazyLioness
- 0,9 Verteidiger
- 0,5 Flagger
- 0,4 CliqueBot
- 0,4 heimtückisch
- 0.3 Angreifer
- 0,3 Gard
- 0.3 SingleTarget
- 0.2 FreezeBot
- 0,2 Sentinel
- 0.2 Driveby
- 0.0 AntiInsidious
- 0.0 MoveBot
- 0.0 CliqueBorg
- 0.0 Rechner
- 0.0 TestBot
- 0.0 Nachahmer
AKTUALISIEREN
Codezeilen werden jetzt gedreht, wenn Sie den Code Ihres Gegners anzeigen. Das heißt, die Linie 1 Ihres Gegners kann Linie 14 sein (oder welche Linie auch immer). Ein Bot hat einen festen Versatz, der seine Linien bei Betrachtung durch einen Gegner um den X
Betrag versetzt . Die Variable des Gegners wird ebenfalls um den gleichen Betrag versetzt. wird sich nicht innerhalb desselben Spiels ändern, aber es wird sich von Spiel zu Spiel ändern.C
X
X
quelle
Antworten:
Borg
Konvertiert alle anderen Bots in Klone von sich. Widerstand ist zwecklos.
Bearbeiten: Kleine Korrektur zum Zurücksetzen von A, wenn sich der Gegner bewegt, bevor ich mit ihm fertig bin. Scheint die Punktzahl nicht zu beeinflussen, aber ich fühle mich besser.
Bearbeiten Nr. 2: Es wurde eine umfassendere Überprüfung hinzugefügt, um sicherzustellen, dass der Klonvorgang ordnungsgemäß abgeschlossen wurde (Zeile 3).
Bearbeiten # 3: Aktualisieren, um die neuen zufälligen Offsets zu verarbeiten. Die Schwierigkeit dabei war, dass neue Klone ihren Code in zufälligen Offsets haben würden, was bedeutet, dass sie den Ort ihrer eigenen Zeilen nicht kennen. Das bedeutet, dass alle Verweise auf meine eigenen Zeilen relativ (zu
This
) sein müssen. Die Zeilennummern der Gegner können immer noch absolut sein, da sie sowieso zufällig sind.quelle
Flagger
Schieße auf den Mond
Und der Rest wird automatisch mit Flagge gefüllt.
quelle
Taschenrechner
Dieser Bot versteht das Ziel dieser Herausforderung nicht und hat beschlossen, einige Zahlen für den Feind zu berechnen.
quelle
OVar(D)
nichtA
eingeben!CliqueBot
Erkennt Freunde über ihren
B
Wert, füllt die Zeilen aller anderen mit Flaggen. Geht auch zu einer gewissen Länge, um die Integrität einer seiner eigenen Flaggen zu bewahren (dieser Teil ist niedlich, aber wahrscheinlich nicht sehr nützlich).Bearbeiten: Es ist nicht überraschend, dass es hier irgendwo einen Fehler gibt, gemessen an der Punktzahl.Ich vermute, dass die Zeilen 0-indiziert sind und mein Code 1-indiziert ist. Hätte das wirklich früher überprüfen sollen. Am Anfang wurde eine Flagge hinzugefügt, um alles zu verbessern.
quelle
Verteidiger
quelle
MoveBot
quelle
Copy(23,C)
?Angreifer
quelle
BotAt(D):Copy(Line(X),OLine(E))
wo Zeile X enthältEquals(1,1):Flag
... zum SpaßLine
kopiert nur die Aktion, nicht die Bedingung.Einzelziel
Jagt dich und füllt dich mit Fahnen!
quelle
All
Bedingung benötigt ein)
Heimtückisch
Ähnliche Idee wie der gleichnamige Bot im vorherigen Wettbewerb. Bewegen Sie sich, bis ich einen anderen Bot getroffen habe, und frieren Sie ihn dann in einer Schleife ein, die seinen eigenen Code mit meinen Flags überschreibt. Diesmal überschreiben die infizierten Bots zufällige Linien anstelle von sequentiellen Linien, wodurch der Infektionsprozess etwas weniger effektiv, aber viel schneller wird.
quelle
Line(4)
kann etwas vereinfacht werden.Add(OVar(C),0)
ist das gleiche wieOVar(C)
undAdd(This,Add(4,Mod(E,14)))
ist das gleiche wieAdd(This,4,Mod(E,14))
.Gard
Greift jeden Roboter daneben an.
quelle
OCon
muss seinOCond
Bot einfrieren
Fängt Sie in einer Schleife ein. Sie belasten Ihre eigene
A
Variable, füllen Sie dann mit Flaggen und gehen zum nächsten Opfer über.quelle
Imitator
Prognostiziert, was Sie tun würden, und macht das dann.
quelle
OLine
oder einLine
Line
um die2
undAdd(D,1)
stattD+1
Faule Löwin
Ursprünglich nur "Löwin", brachte meine erste Einreichung zum Wettbewerb den Titel "faul" ein, indem ich buchstäblich nichts tat, als ich in den Simulator eingeführt wurde.
Ihre Lethargie ist in der Tat auf einen Fehler zurückzuführen (oder möglicherweise auf mein Missverständnis des Ereignismodells), bei dem die Bedingungen in den ersten drei Zeilen (eine einfache Paritätsprüfung, um sicherzustellen, dass Flags nicht überschrieben werden) gelegentlich unerklärlicherweise bewerten
true
und Leo in einer Lemniskate-Schleife einschließen . Einige andere Bedingungen (insbesondere solche, die von derBotAt()
Bedingung abhängen) werden ebenfallstrue
zu Zeiten bewertet, zu denen keine benachbarten Bot (s) vorhanden sind. SchließlichMove
undCopy
werden Richtlinien eindeutig ignoriert , wenn sie durch den Simulator zu treten. Da meine bedingten Logikketten etwas episch sind, gibt es in meinem Code und im Simulator viel Platz für Fehler . ;)In jedem Fall reiche ich Lazy Lioness als Testfall für Fehlerdiagnose oder Simulator-Debugging ein, was hoffentlich zur Entstehung einer nicht so faulen Löwin führen wird, die ich dann simulieren und als meine erste echte Einreichung bei den Bots verfeinern kann v2 Wettbewerb.
Es macht nichts
quelle
Modified
Bedingung anstelle einiger derEquals
Modified
Bedingung ist eine Einladung für eine Endlosschleife. Wenn ich keine Paritätsprüfung verwenden kann, entferne ich einfach die Zeilen vollständig. Finde etwas anderes heraus, das nützlich ist, um sie einzusetzen. ;)Wächter
Verbesserung auf
Gard
. Trifft Bots in der Nähe mit Flaggen in den ersten 8 Zeilen. (das heißt, alle am häufigsten verwendeten)quelle
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
CliqueBorg
Der Versuch, die CliqueBot- und Borg-Technologie zu kombinieren, um einen Bot zu erstellen, der trotz des Linienversatzes Kopien von sich selbst erkennt. Es beginnt seinen Kopiervorgang auch in der zuletzt ausgeführten Codezeile auf dem gegnerischen Bot und nicht in Zeile 0, wodurch die Wahrscheinlichkeit größer wird, dass sie an Ort und Stelle einfriert, aber auch die Wahrscheinlichkeit einer beschädigten Kopie höher ist (tatsächlich bin ich das nicht Sicher, das funktioniert sogar, ich habe es nicht getestet und es ist ziemlich komplex.
quelle
Vorbeifahren
Ein letzter Versuch vor Ablauf der Frist.
quelle