Ihr Geologenkumpel hätte beinahe Ihre Bürotür eingetreten, als er mit aufgeregten Augen hereinplatzte und Sie bat, mit ihm zu einem Ort zu kommen, den er gerade entdeckt hatte. Unterwegs erklärt er, dass er glaubt, buchstäblich nur Gold geschlagen zu haben. Das einzige Problem ist, dass es tief unter der Erde in einer Höhle mit einem sehr instabilen Dach vergraben ist. Es ist zu gefährlich, Höhlenforschung zu betreiben, deshalb möchte er, dass Sie einen seiner Höhlenforschungsroboter so programmieren, dass er so viel Gold wie möglich sammelt, bevor er es wieder hochzieht. Er erwähnt auch, dass er die Höhle untersucht und einige Wildtiere gefunden hat, die für die Roboter schädlich sein könnten, und dass er dort einige Geräte abgelegt hat, die möglicherweise noch verwendbar sind. Jeder Roboter ist mit zwei Armen und einer Reihe von Sensoren ausgestattet. Wenn Sie am Tatort ankommen, sagt er Ihnen, dass er plant, mehr Programmierer zu rekrutieren.
Nun, bis auf das Wesentliche. Die Sensoren geben Informationen als ASCII-Zeichen an Ihr Programm weiter. Hier ist eine Liste der Bedeutung der einzelnen Charaktere und Beschreibungen für alles, was der Bot in der Höhle antreffen könnte:
Code Name/Description
Y Your bot
You do things
@ Other bots
They do other things
- Ground
This doesn't do things
C Centipede
These will bite you and leave a poison effect
The bite will cost 1 health
The poison effect will last for 3 turns, costing 2 health each turn
B Bats
If bats end up in the same space you are, your bot runs in a random direction during its turn rather than what you told it to do
L Lion (because reasons)
Lions deal heavy damage, 10 health, each time they attack
F Food
Eating this will give you 5 health
Can only be used once
W Water
Drinking this will cure poison effects early
Can only be used once
R Revealer
This will increase the range of your visibility to an 11x11 grid
The extra range will only be 75% correct, but the original range won't be effected
K Knife
You do twice as much damage to other bots if you have a knife
G Gold
The whole reason you're doing this in the first place
N Nurse Nina
She mend you good
Restores your health by 10 while you occupy the same space as her
} Boulder
You can't walk over boulders, and neither can anything else
P Pit
If you fall in a pit, you will be stuck for 3 turns
Die Größe der Höhle hängt davon ab, wie viele Bots teilnehmen. Es beginnt mit 30x30 und erhält für jeden Bot zusätzlich 10x10. 2 Bots erkunden also eine 50x50-Höhle.
Bots beginnen mit 20 Gesundheit, haben aber keine maximale Gesundheitsgrenze.
Eingang:
Sie erhalten Eingaben über STDIN im folgenden Format:
20,5,10,1,0,True,False <-health, number gold pieces, number of turns your bot has lasted, number of until the poison wears off, number of turns until you are no longer stuck in a pit, if you have a revealer, if you have a knife
-----
-G}--
--Y-L
-C---
---B-
Die erste Zeile enthält Informationen zu Ihrem Bot, und der Rest ist das Raster, das Ihr Bot sehen kann. Wenn sich Ihr Bot an einer der 4 Wände der Höhle befindet, erhalten Sie ein Gitter, das eher so aussieht (wenn Sie sich ganz im Westen befinden):
---
}--
Y--
---
---
Die Höhle wickelt sich nicht um und Ihre Vision auch nicht. Die Wände der Höhle sind nicht markiert. Der einzige Hinweis, den Ihr Bot erhält, dass er sich einer Wand nähert, ist die eingeschränkte Sicht. Mit dem Revealer erhalten Sie möglicherweise Folgendes:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Ausgabe:
Sie erhalten zwei Züge pro Spielzug, die Sie im folgenden Format ausgeben:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Mögliche Aktionen sind die folgenden:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Mögliche Richtungen sind die folgenden:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Die Bewegungen werden von links nach rechts angewendet.
Wendet sich:
Dreht den Fortschritt folgendermaßen um:
Gifteffekte werden auf jeden Spieler angewendet, der vergiftet wurde
Nicht-Bots bewegen sich und greifen an
2a. Löwen, Tausendfüßler und Fledermäuse bewegen sich zufällig
2b. Löwen und Tausendfüßler greifen alles an, was direkt daneben liegt (auch diagonal).
2c. Der Fledermaus-Effekt wird nur auf einen Bot angewendet, wenn er sich auf demselben Feld wie die Fledermaus befindet
2d. Schwester Nina bleibt 3 Runden an einem Ort und springt dann zu einem zufälligen Ort.
Bots bewegen sich
3a. Wenn Ihr Bot eine ungültige Ausgabe liefert, bewegt er sich nicht
3b. Ihr Bot wird versuchen, so nah wie möglich an den von der Ausgabe angegebenen Platz heranzukommen (weitere Informationen finden Sie in der Anmerkung unten).
3c. Ein Angriff auf einen Hundertfüßer, Löwen oder eine Fledermaus tötet ihn
3d. Das Angreifen eines anderen Bots ohne Messer verursacht 5 Schadenspunkte und 10 mit einem Messer
Regeln:
Halten Sie sich an gängige Sprachen, die unter OS X oder Linux ausgeführt werden können.
Sie können optional bis zu 1 KB Daten in eine Datei schreiben und diese nicht überschreiten
Wertung:
Bots werden nur in der Höhle sein, bis nur noch einer übrig ist oder bis 50 Runden vergangen sind, je nachdem, was zuerst eintritt. Ihr Bot wird anhand der Summe der Anzahl der gesammelten Goldmünzen und der Anzahl der Umdrehungen beurteilt.
Controller-Code kann hier zum Testen heruntergeladen werden ( erstellen Sie einen Ordner mit dem Namen "Bots" in demselben Verzeichnis, in das Sie ihn heruntergeladen haben, und legen Sie Ihren Bot in "Bots" ab). Sie benötigen NumPy, um ihn auszuführen. Fühlen Sie sich frei, darin zu graben, aber Sie müssen das Chaos entschuldigen ...
Hier ist ein Code für einen zufälligen Bot:
#!/usr/bin/python
import random as r
a = ['M','A','H']
d = ['NN','NE','EE','SE','SS','SW','WW','NW']
print(a[r.randint(0,2)]+d[r.randint(0,7)]+a[r.randint(0,2)]+d[r.randint(0,7)])
**** Ihr Bot bewegt sich immer in die allgemeine Richtung, die Ihre Ausgabe angibt. Wenn er jedoch durch einen Stein oder eine Wand blockiert wird, hängt die genaue Richtung von den Umständen ab. Zum Beispiel, wenn Ihr Bot wie folgt an einer Wand steht:
---
}--
Y--
---
---
und Ihre Ausgabe ist
MNWMSW
Ihr Bot bewegt sich ein Feld nach unten. Es konnte sich nicht nach Norden oder Westen bewegen, so dass diese Bewegung keine Wirkung hatte. Es konnte sich nach Süden bewegen (und tat es), aber es konnte sich nicht nach Westen bewegen. Wenn Ihr Bot jedoch versucht, sich nach Nordosten zu bewegen, geht er direkt in dieses Feld (diagonale Bewegung ist diagonal, nicht prozedural).
Bestenliste
Dies sind die Durchschnittswerte von 4 Spielen.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50
quelle
Antworten:
Indiana Jones, Python 2
Dieser Bot hat vor nichts Angst. Es wird versuchen, das Gold zu bekommen; und wenn es keine findet, wird es versuchen, Gegner mit Messern zu erstechen.
quelle
line.index('Y')
wird einen Fehler auslösen, wenn "Y" nicht in der Zeile ist,line.find('Y')
wird aber -1 zurückgeben, wenn "Y" nicht in der Zeile ist. Ansonsten ist es toll!MSNMSN
, was ungültig ist.Feigling, Python3
Ein Feigling läuft immer vor potenziellen Bedrohungen davon.
Wenn er sich jedoch super stark fühlt, läuft er plötzlich Amok und ersticht alles in seiner Nähe.
Das Problem bei der aktuellen Implementierung besteht darin, dass Verschiebungsbefehle ohne Wissen ausgegeben werden, ob es sich um die erste oder die zweite Verschiebung handelt.
quelle
Der Bot des Überlebens - Python 2
Bearbeiten: Bessere Grubenvermeidung hinzugefügt.
quelle
Kugelfisch, Python 3+
Ich bin nur diese Person.
quelle