CodeBots 2: Ereignisgesteuertes Design


11

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 Adurch 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 Centhält die Zeilennummer der Bedingung, die wahr ist, und dann wird diese Zeile ausgeführt. Am Ende jeder Runde Cwird erhöht.

Es gibt die verfügbaren Bedingungen:

  1. Startist nur in der ersten Runde wahr. Sie müssen dies genau einmal in Ihrem Code haben
  2. BotAt(N) ist wahr, wenn sich an der durch N definierten Stelle ein Bot befindet
  3. Equals(A,B) ist wahr, wenn A gleich B ist. Sie können verschiedene Typen sein, wenn ja, sind sie nicht gleich.
  4. Modified(A)ist wahr, wenn Ain der letzten Runde kopiert wurde. Amuss ein Variablenname, eine Zeile oder eine Bedingung sein
  5. Any(C1,C2,...) ist wahr, wenn eine der Bedingungen wahr ist
  6. None(C1,C2,...) ist wahr, wenn keine der Bedingungen wahr ist
  7. All(C1,C2,...) ist wahr, wenn alle Bedingungen wahr sind
  8. Not(C)ist wahr, wenn C falsch ist. Cmuss 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.

  1. A, B, C, D,E
  2. Eine Zahl von 0 bis 23
  3. This gibt die Zeilennummer zurück, auf der es sich gerade befindet
  4. Add(N1,N2,...) gibt die Summe aller Werte zurück
  5. Sub(N1,N2) gibt N1 minus N2 zurück
  6. Mult(N1,N2,...) gibt das Produkt aller Werte zurück
  7. Div(N1,N2) gibt N1 geteilt durch N2 zurück
  8. Mod(N1,N2) wird N1 mod N2 zurückgeben
  9. OVar(N) akzeptiert einen Variablennamen und gibt die Variable des Gegners zurück
  10. Line(N) gibt die N-te Zeile in Ihrem Code zurück
  11. Type(N) gibt den N-ten Zeilentyp in Ihrem Code zurück (die Typen sind die Namen der Aktionen)
  12. Cond(N) gibt die Bedingung in der N-ten Zeile zurück
  13. CondType(N) gibt den Bedingungstyp in der N-ten Zeile zurück (die Typen sind die Namen der Bedingungen)
  14. OLine(N) gibt die N-te Zeile im Code Ihres Gegners zurück
  15. OType(N) gibt den N-ten Zeilentyp im Code Ihres Gegners zurück
  16. OCond(N) gibt die Bedingung in der N-ten Zeile zurück
  17. OCondType(N) gibt die Konditionsart in der N-ten Zeile zurück

Aund Bsind für Ihren persönlichen Gebrauch bestimmt, Cwerden verwendet, um zu bestimmen, welche Zeile in Ihrem Code ausgeführt werden soll, und Dwerden als Richtung verwendet. Jeder Wert von Dbezieht sich auf ein anderes Quadrat- und Richtungspaar. Eerzeugt jedes Mal einen zufälligen Wert. Dund Ewird 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:

  1. Movebewegt Sie 1 Feld vorwärts in die Dth-Richtung. Wenn dort ein Bot ist, werden Sie sich nicht bewegen.
  2. Copy(A,B)kopiert die Variable Anach B. Bkann kein numerischer Wert sein, außer für einen Variablennamen. Aund Bkann nicht von verschiedenen Arten sein. Durch das Kopieren einer Zeile wird die Bedingung nicht kopiert.
  3. Flagtut nichts. Der Bot mit den meisten Flags in Ihrem Code erhält einen Punkt. Der Bot mit den meisten Punkten gewinnt.
  4. If(C,L1,L2)führt die Zeile aus, L1wenn dies der CFall ist, andernfalls wird ausgeführt L2. Cist eine Bedingung L1und L2muss 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 Startwird 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 IfAnweisungen 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 Cam 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

  1. 893,9 Borg
  2. 1.3 LazyLioness
  3. 0,9 Verteidiger
  4. 0,5 Flagger
  5. 0,4 CliqueBot
  6. 0,4 heimtückisch
  7. 0.3 Angreifer
  8. 0,3 Gard
  9. 0.3 SingleTarget
  10. 0.2 FreezeBot
  11. 0,2 Sentinel
  12. 0.2 Driveby
  13. 0.0 AntiInsidious
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 Rechner
  17. 0.0 TestBot
  18. 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 XBetrag 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.CXX


Nathan: Können Sie "Lazy Lioness" überprüfen, um festzustellen, ob die von mir gemeldeten Fehler legitim sind (oder ob ich nur zum Mittagessen ausgehe)? Keine Eile. Stellen Sie nur sicher, dass Sie über die Einreichung informiert sind.
COTO

@COTO Sorry, Schulen waren verrückt. Ich werde versuchen, es heute Abend zu erreichen.
Nathan Merrill

Die Bedingung 'Alle' kann für jede durch Kommas getrennte Liste von Bedingungen implizit gemacht werden. Dies würde das Lesen der Einträge etwas erleichtern.
ccarton

Ich glaube, ich habe deinen Fehler gefunden. Die FuctionParser-Objekte werden als Schlüssel in einer HashMap verwendet, was bedeutet, dass Sie eine geeignete Gleichheitsmethode benötigen. Dies behebt das Problem mit CliqueBot und wahrscheinlich auch Lazy Lioness. Ich habe dir eine Pull-Anfrage geschickt.
ccarton

@ccarton die HashMap speichert nur die Werte, es wird nicht zum Testen der Gleichheit verwendet
Nathan Merrill

Antworten:


13

Borg

Konvertiert alle anderen Bots in Klone von sich. Widerstand ist zwecklos.

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

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.


Hey, können wir uns über diesen Bot unterhalten? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@ Nathan, hast du die neueste Version dieses Eintrags im letzten Lauf verwendet?
Ccarton

Ich bin erstaunt, dass dieser Bot andere Bots so erfolgreich infizieren kann. Ich würde gerne einen Überblick darüber bekommen, wie es funktioniert.
Sparr

@ccarton no. Ich wusste nicht, dass es aktualisiert wurde. Erneutes Ausführen.
Nathan Merrill

@ Sparr Ich habe einige Kommentare hinzugefügt. Hoffe das macht es leichter zu folgen. Ich denke, der Bot ist aufgrund des exponentiellen Effekts des Klonens so effektiv. Jeder Bot, den es infiziert, geht aus und infiziert andere. Außerdem werden sie natürlich versuchen, sich gegenseitig zu reparieren, wenn sie Schaden nehmen.
ccarton


3

Taschenrechner

Dieser Bot versteht das Ziel dieser Herausforderung nicht und hat beschlossen, einige Zahlen für den Feind zu berechnen.

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move

Sie sollten die Ergebnisse OVar(D)nicht Aeingeben!
MegaTom

@ MegaTom Done;)
CommonGuy

3

CliqueBot

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

Erkennt Freunde über ihren BWert, 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.


Ich glaube, ich habe den Fehler im Controller gefunden. Ich habe ihm eine Pull-Anfrage geschickt. Bis er es akzeptiert, können Sie meine Gabel ausprobieren, wenn Sie möchten, und mich wissen lassen, ob es für Sie funktioniert.
ccarton

Der Fehler wurde in der neuesten Version behoben.
Nathan Merrill

2

Verteidiger

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))


2

Angreifer

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)

BotAt(D):Copy(Line(X),OLine(E))wo Zeile X enthält Equals(1,1):Flag... zum Spaß
siehe

@Sieg Linekopiert nur die Aktion, nicht die Bedingung.
MegaTom

Meine übermächtige Taktik :(
siehe

2

Einzelziel

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

Jagt dich und füllt dich mit Fahnen!


Die AllBedingung benötigt ein)
Nathan Merrill

2

Heimtückisch

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

Ä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.


Line(4)kann etwas vereinfacht werden. Add(OVar(C),0)ist das gleiche wie OVar(C)und Add(This,Add(4,Mod(E,14)))ist das gleiche wie Add(This,4,Mod(E,14)).
MegaTom

@ MegaTom Ich habe das erste unnötige Hinzufügen durchgeführt, um die logischen Teile der vorhergehenden Zeilen auszurichten. Der zweite Grund war, dass nicht bekannt war, dass Add mehrere Parameter annehmen kann. Danke
Sparr

1

Gard

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

Greift jeden Roboter daneben an.


Ihre letzte Zeile kann nicht von einer Bedingung in eine Zeile kopiert werden.
Nathan Merrill

@ NathanMerrill Ich habe gerade das
behoben

OConmuss seinOCond
Nathan Merrill

1

Bot einfrieren

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

Fängt Sie in einer Schleife ein. Sie belasten Ihre eigene AVariable, füllen Sie dann mit Flaggen und gehen zum nächsten Opfer über.


Zeile 3: Bitte ersetzen Sie D + 1 durch Add (D, 1)
Nathan Merrill

Sie gehen davon aus, dass Start auf Zeile Null steht. Jetzt ist jeder motiviert, seinen Start in Zeile 2 zu setzen. Dies wird zu einem albernen Eskalations- / Wiedervorlage-Trend führen :(
Sparr

1

Imitator

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

Prognostiziert, was Sie tun würden, und macht das dann.


Bitte ersetzen Sie D + 1 durch Add (D, 1)
Nathan Merrill

Sie können einen Befehl auch nicht als Zeile übergeben. Sie müssen entweder ein OLineoder einLine
Nathan Merrill

@ NathanMerrill bereit zu gehen! (Zumindest denke ich, dass es ist)
MegaTom

Dieser Bot hat meinen Code wirklich in Schwierigkeiten gebracht, aber das war meine Schuld, nicht deine. Es gibt ein paar Fehler, bitte Lineum die 2und Add(D,1)stattD+1
Nathan Merrill

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 trueund Leo in einer Lemniskate-Schleife einschließen . Einige andere Bedingungen (insbesondere solche, die von der BotAt()Bedingung abhängen) werden ebenfalls truezu Zeiten bewertet, zu denen keine benachbarten Bot (s) vorhanden sind. Schließlich Moveund Copywerden 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

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)

Ich kann keinen Fehler sehen, aber nur für den Fall, dass Sie wahrscheinlich ModifiedBedingung anstelle einiger derEquals
MegaTom

cliqueBot scheint das gleiche Problem zu haben. Ich denke, es ist ein Compiler-Fehler.
MegaTom

@ MegaTom: Die ModifiedBedingung 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. ;)
COTO

Ich glaube, ich habe den Fehler im Controller gefunden. Ich habe ihm eine Pull-Anfrage geschickt. Bis er es akzeptiert, können Sie meine Gabel ausprobieren, wenn Sie möchten, und mich wissen lassen, ob es für Sie funktioniert.
Ccarton

1

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)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))

Ich denke, Sie haben eine falsch platzierte Klammer in Zeile 3. Die erste Nicht ist nicht richtig geschlossen. Ich denke, es sollte seinAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

CliqueBorg

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

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.


Bitte ersetzen Sie Plus durch Add und Minus durch Sub
Nathan Merrill

1

Vorbeifahren

Ein letzter Versuch vor Ablauf der Frist.

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.