Code Bots
Ich hasse private und geschützte Variablen. Ich möchte einfach auf alles zugreifen!
Wenn Sie wie ich sind, dann ist diese Herausforderung für Sie!
Schreiben Sie einen Bot, der in Harmonie mit anderen Bots zusammenarbeitet und andere Bots dazu bringt, das zu tun, was Sie wollen. Sie sind Programmierer und wissen, wie die Dinge funktionieren sollen. Ihre Aufgabe ist es, so viele andere Bots wie möglich auf Ihre Art und Weise zu konvertieren.
Der Code
Sie haben 24 Codezeilen, um Ihren Bot zu schreiben. In jeder Runde führt jeder Bot 1 Zeile nacheinander aus.
Jeder Bot speichert 5 Variablen A
durch E
. A
und B
sind für den persönlichen Gebrauch, C
speichert die nächste auszuführende Zeile, D
speichert die aktuelle Richtung und E
ist eine Zufallszahl. Die Variablen beginnen bei 0, außer D
bei einem zufälligen Wert. Alle Variablen haben nur Speicher 0-23. Zahlen, die größer oder kleiner sind, werden mit 24 moduliert.
In diesem Beitrag benutze ich den Gegner, um der benachbarte Bot zu sein, dem Sie gegenüberstehen
Jede Zeile muss einen der folgenden 5 Befehle enthalten:
Flag
tut nichts. Nur dass du so gewinnstMove
bewegt deinen bot in dieD
th richtung. Wenn ein Bot das Feld bereits belegt, wird keine Bewegung ausgeführtCopy Var1 Var2
kopiert den Inhalt von Var1 in Var2If Condition Line1 Line2
Wenn Condition true ist, wird Line1 ausgeführt, andernfalls Line2Block Var1
blockiert den nächsten Schreibzugriff auf eine Variable
Eine Variable kann wie folgt verwendet werden:
#Var
wird die Variable als Zeilennummer verwenden. Wenn A
17 ist, Copy #8 #A
wird der Inhalt von Zeile 8 in Zeile 17 kopiert. Dabei
*Var
wird die Variable Ihres Gegners verwendet. Copy 5 *C
setzt die C
Variable des Gegners auf 5
Var+Var
, um die beiden Variablen zu addieren. Copy D+1 D
dreht den Bot nach rechts
Wann D
als Richtung verwendet wird, [North, East, South, West][D%4]
wird verwendet
Diese Modifikatoren können verkettet werden: Copy *#*C #9
kopiert die nächste Zeile, die Ihr Gegner ausführt, in Ihren eigenen Code in Zeile 9. **D
Bezieht sich auf die D
Variable Ihres Gegners .
Eine Bedingung wird wie folgt bewertet:
- Wenn
Var
:- Wenn Var
A
durch istC
, wird true zurückgegeben, wenn Var ungleich null ist, andernfalls false. - Wenn Var ist
D
, wird true zurückgegeben, wenn sich ein Bot in derD
Richtung befindet, andernfalls false - Wenn Var ist
E
, wird true zurückgegeben, wenn E ungerade ist, andernfalls false - Wenn Var eine Zeile ist, wird true zurückgegeben, wenn es sich um eine Flag-Zeile handelt
- Wenn Var
- Wenn
Var1=Var2
:- Gibt true zurück, wenn beide gleich sind
A-E
und dieselbe Zahl haben - Gibt true zurück, wenn beide Zeilen sind und der Zeilentyp gleich ist
- Gibt true zurück, wenn beide gleich sind
- Wenn
Var1==Var2
:- Gibt true zurück, wenn beide gleich sind
A-E
und dieselbe Zahl haben - Gibt true zurück, wenn beide Zeilen sind und identisch sind (Flags von verschiedenen Bots sind nicht gleich)
- Gibt true zurück, wenn beide gleich sind
50 Bots von jedem Typ werden nach folgendem Muster in eine toroidale Welt gesetzt:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
..B...B...B...B.
Nach jedem Spiel von 5.000 Runden werden die Flaggen auf jedem Bot gezählt. Sie erhalten einen Punkt, wenn ein Bot mehr von Ihrer Flagge als jede andere Art von Flagge hat. Bei einem Gleichstand zwischen N
Bots werden keine Punkte vergeben.
Es wird 10 Spiele geben und am Ende werden Punkte gesammelt.
Randnotizen
Zeilenende-Kommentare sind zulässig und mit gekennzeichnet //
Der Versuch, etwas zu tun, das keinen Sinn ergibt, wie z. B. das Hinzufügen zu einer Zeile, führt zu nichts
Der Versuch, auf einem nicht existierenden Bot etwas zu tun, führt zu nichts
Die unendliche Rekursion eines If
Willens endet, ohne dass eine Zeile ausgeführt wird
If
ändert den Wert von nicht C
A Block
läuft erst ab, wenn jemand versucht, darauf zu schreiben
Es können mehrere Variablen und Zeilen gleichzeitig gesperrt werden
Block
Wenn Sie eine Variable mehrmals verwenden, wird sie mehrmals blockiert, solange sich die zweite Blockanweisung in einer anderen Codezeile als die erste befindet
Leerzeichen sind nur zwischen Argumenten (und nach dem Befehl) zulässig
Wenn ein Bot kürzer als 24 Zeilen ist, ist Flag der Rest der Zeilen.
Beispielprogramm
Copy 2 C //Skip to the If line
Flag //Where I'm storing my flag
Move //Move in the D'th direction
If D #5 #2 //If there's a bot, copy code, otherwise, move!
Copy #1 *#E //Copy my flag onto a random spot in my bot's code
Copy 2 C //Skip back to the If line
Das Programm wird von meinem Python - Controller ausgeführt werden hier .
Der Java-Controller ist da. Er ist schnell und sieht viel besser aus als der Python- Controller .
Anzeigetafel:
- 6837 $ Kopie
- 3355 Lockheed
- 1695 MindControl
- 967 byzantinisch
- 959 AttackOrElse
- 743 Cadmyllion
- 367 Influenza
- 251 TheCommonCold
- 226 Magus
- 137 HideBlockAttack
- 129 RowBot
- 123 FastMoveCloneDodge
- 112 FastForwardClone
- 96 QuickFreeze
- 71 RepairAndProtect
- 96 SuperFreeze
- 93 RovingVirus
- 80 ForwardClone
- 77 FreezeTag
- 68 Palimpseste
- 62 BlockFreezeAttack
- 51 RushAttackDodge
- 46 Blocker
- 40 TurretMaker
- 37 Nachahmer
- 37 Kamikaze
- 35 FlagInjector
- 33 RandomCopier
- 31 heimtückisch
- 29 HappyAsAClam
- 25 NanoVirus
- 21 Nullifier
- 19 Nanoviris
- 17 BoringCopybot
- 16 Movebot
- 14 Flagbot
- 13 Neutralisator
- 12 Krebs
- 9 DNAbot
- 9 Parasit
- 8 MetaInsidious
- 8 Umbenennung
- 8 AdaptiveBot
- 8 ReproducingBot
- 8 KungFuBot
- 5 QuickFreezerbot
- 4 Angreifer