Nahrungsmittelknappheit in der Schlangengrube
Zum ersten Mal seit 35 Jahren geht der Schlangengrube die Nahrung aus. Die einheimischen Schlangen müssen sich nun gegenseitig bekämpfen, um diese Nahrungsmittelknappheit zu überstehen. Nur eine Schlange kann an der Spitze der Nahrungskette stehen!
Bestenliste
Noch nicht hier!
Letzte Aktualisierung am 24. Februar
Link zu Visualisierungen der letzten Spiele
Beschreibung
Wenn Sie um die letzten verbleibenden Äpfel / Kirschen / was auch immer kämpfen möchten, müssen Sie eine Schlange in Form eines Programms bereitstellen, das eine bestimmte Eingabe akzeptiert und ihren nächsten Zug zurückgibt.
Die einzige Wendung ist, dass Sie in Ihrer Grube nicht allein sind. Eine andere Schlange wird auch versuchen, das seltene Futter zu bekommen! Aber es ist dunkel in der Schlangengrube, so dass Sie nur sich selbst und den Apfel sehen können. Ein Zusammenstoß mit deinem Gegner führt zu deinem Tod, genau wie wenn du dich beißt oder gegen eine Wand stößt. Weil Äpfel heutzutage selten sind, hungern Sie außerdem, wenn Ihr Gegner genug gegessen hat, um eine Länge von 7 zu erreichen.
Die Schlangengrube ist eine zweidimensionale Karte mit einer Breite und Höhe von 15, während die äußersten Kacheln eine unpassierbare Wand bilden:
0 1 2 . . . c d e
0 # # # # # # # # #
1 # #
2 # x #
. # #
. # #
. # #
c # #
d # #
e # # # # # # # # #
Koordinaten sind nullindexiert, also der Punkt, an dem x
sich das befindet 12,2
.
Ihr Bot wird mit zwei Argumenten aufgerufen:
- Die Lage des Essens
- Die Positionen Ihrer Körpersegmente, getrennt durch
/
Es sollte dann eine der folgenden Angaben zu stdout schreiben:
L
für eine viertel Linkskurve als nächste BewegungR
für eine viertel rechts abbiegen- Alles andere für eine Bewegung in die gleiche Richtung
Beispiel:
Projects/Snakepit> python bot.py 12,2 4,8/4,9/3,9/2,9
'R'
Projects/Snakepit>
Regeln
Ihr Bot darf:
- Alles ausgeben, weil alles ein gültiger Zug ist
- Lesen / Schreiben Sie Dateien in einem eigenen Verzeichnis, das sich unter ./snakes/ThisIsYourSnake befindet
- Laufen auf Ubuntu 14.04 und Windows 7 (muss es eigentlich)
Ihr Bot darf nicht:
- Dateien außerhalb des eigenen Verzeichnisses lesen / schreiben
- Verwenden Sie externe Ressourcen wie das Internet
- Haben Sie eine Laufzeit von mehr als 10 Sekunden pro Ausführung
Sie müssen in Ihrer Antwort angeben:
- Der Quellcode des Bots
- Ein Bot / Snake Name
- (Dein eigener Name)
- Ein Befehl, um Ihren Bot auszuführen
Wenn Sie mir das Leben erleichtern möchten, geben Sie bitte eine Zeile wie
CoolSnake MyOwnName python bot.py
.
Wertung
Deine Schlange bekommt einen Punkt, wenn sie ein Spiel gegen eine andere Schlange gewinnt. Ein Spiel wird unter folgenden Umständen gewonnen:
- Ihr Gegner trifft sich selbst, Sie oder eine Wand
- Sie erreichen die Länge 7
Außerdem verhungern beide Schlangen nach 200 Zyklen.
Jede Schlange kämpft gegen jede andere Schlange um ihr Überleben.
Beispiel Bots
Um Ihnen eine Idee zu geben, stelle ich diese beiden (teilnehmenden) Beispielschlangen zur Verfügung:
SneakySnake
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
if food[0] < head[0] :
vn = [-1, 0]
elif food[0] > head[0] :
vn = [1, 0]
elif food[0] == head[0] :
if food[1] < head[1] :
vn = [0, -1]
elif food[1] > head[1] :
vn = [0, 1]
if v == vn :
return "..."
elif [-v[1], v[0]] == vn :
return "R"
elif [v[1], -v[0]] == vn :
return "L"
else :
return random.choice(("R", "L"))
if __name__ == "__main__" :
print main(*sys.argv[1:3])
SneakySnake Cipher python bot.py
ViciousViper
#!/usr/bin/env python
import sys, random
def main(food, me) :
food = [int(i) for i in food.split(",")]
me = [[int(i) for i in seg.split(",")] for seg in me.split("/")]
head = me[0]
v = [head[0] - me[1][0], head[1] - me[1][1]]
vn = [food[0] - head[0], food[1] - head[1]]
if 0 not in vn :
vn[v.index(0)-1] = 0
vn[vn.index(0)-1] = vn[vn.index(0)-1] / abs(vn[vn.index(0)-1])
if v == vn :
return "..."
elif [v[0] + vn[0], v[1] + vn[1]] == [0, 0] :
return random.choice(("R", "L"))
else :
return "R" if [-v[1], v[0]] == vn else "L"
if __name__ == "__main__" :
print main(*sys.argv[1:3])
ViciousViper Cipher python bot.py
Und ihre Übereinstimmungen:
Steuerungsprogramm
Sie finden das Steuerungsprogramm auf github sowie alle Bots und Aufzeichnungen vergangener Spiele.
Bedarf:
- Python 2 + die Bibliotheken
numpy
undpillow
(Sie können überprüfen, ob sie über vorhanden sindpython -c "import numpy, PIL"
, wenn es Fehler auslöst, fehlen die Module) - Damit die Steuerung funktioniert, muss die gesamte Ordnerstruktur kopiert werden
- Registrieren Sie Ihren / Ihre Bot (s) im
./snakes/list.txt
Datei im Stil vonCoolSnake MyOwnName Command To Run My Bot
- Platzieren Sie Ihren Bot in einem Verzeichnis mit dem Namen unter
./snakes
- Weder Ihr noch der Name Ihres Bots dürfen Leerzeichen enthalten!
Verwendung:
python run.py [-h] [-n int] [-s int] [-l int] [-c int] [-g]
python run.py
führt das Turnier mit allen in list.txt registrierten Bots und den Standardeigenschaften aus. Erweiterte Optionen sind:
-h
Zeigt eine Hilfemeldung an-n int
Kampfrunden für jede Kombination von Gegnern-s int
bestimmt die Größe des Rasters (Breite und Höhe)-l int
Legt die erforderliche Länge fest, um zu gewinnen-c int
Legt die Grenze der Zyklen fest-g
oder--no-gifs
erstellt keine Gifs der Übereinstimmungen
quelle
Antworten:
Zen - C ++
Dieses Codémon ist nicht hier, um zu essen, sondern um zu kämpfen. Er weiß, dass ein toter Feind seine Äpfel nicht stehlen wird.
Name| Author |Launch with
Zen GholGoth21 Zen.exe
Strategie
Alle (außer CircleOfLife) eilen zu den Äpfeln, aber nicht immer zu Zen. Wenn der Feind das Essen vor sich erreichen kann, wartet er einfach in der Mitte (was? Aber was machst du hier, CircleOfLife?). Ansonsten geht Zen zum Apfel und dreht sich um, während er darauf wartet, dass etwas passiert. Tatsächlich benutzt er den Apfel als Köder.
Ich habe nichts gegen die merkwürdige Strategie von CircleOfLife geschrieben, weil er nur mit sehr viel Glück gewinnen kann.
Der Code
Dies ist der vollständige Code des C ++ - Projekts. Schneide die 11 Quelldateien und das Makefile aus und kompiliere mit
make
Oder laden Sie die Zip-Datei herunter: Zen.zip
Ergebnisse
Und einige typische Schlachten (ViciousViper vs Zen und SneakySnake vs Zen):
Edit : Ich füge diesen sehr interessanten Kampf gegen CircleOfLife hinzu:
quelle
CircleOfLife (Java)
CircleOfLife Manu java CircleOfLife
(Kompilieren mitjavac CircleOfLife.java
)Läuft in die Mitte und bleibt dort. Ich hoffe, dass einige Einreichungen auf dem Weg zum Essen darauf stoßen werden.
quelle