Ostereiersuche
Bot finden Ei vor Hase finden Ei. Bot glücklich.
Überblick
Dies ist eine echte Herausforderung zu Ehren von Ostern und der Osterei-Jagdtradition!
Ihr Bot hat eine Vision von zwei Räumen in jeder Richtung, einschließlich Diagonalen, wodurch ein 5x5-Quadrat um Sie herum entsteht, das Sie sehen können. Es sucht nach Eiern, und wer die meisten Eier findet, gewinnt!
Die Tafel
Das Brett besteht aus o
s, die Ostereier sind, #
s, die Wände sind, *
s, die andere Spieler sind, und s, die leere Räume sind.
- Es wird ein Quadrat mit Kantenlänge sein
(number of entries) * 3
. - Es wird von Mauern umgeben sein.
- Innerhalb der Wände befindet sich eine Auswahl zufällig platzierter, gerader Wände von
#
, die eine zufällige Länge zwischen 2 und 10 einschließlich haben. Es wird(number of entries) * 3
von ihnen sein. - Die Eier werden dann zufällig platziert. Es wird
(number of entries) * 4
von ihnen geben, und sie werden nur auf leeren () Feldern generiert .
- Es müssen mindestens 7 Elemente vorhanden sein, damit der Board-Generierungsprozess ordnungsgemäß funktioniert.
Hier ist eine JSFiddle, die ein zufälliges Board generiert , mit dem Sie testen können. Hier ist ein Beispiel mit (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Nachdem das Brett generiert wurde, wird jeder Spieler auf ein zufälliges Feld (leeres Feld) gelegt.
Eingang
Sie werden sechs Eingabezeilen nehmen. Die ersten fünf Zeilen sind Ihr Sichtfeld (Felder außerhalb der Grenzen der Tafel werden durch dargestellt X
, und das mittlere Feld ist immer *
Sie selbst), und die sechste Zeile ist (zunächst) leer.
Ausgabe
Sie werden drei Zeilen ausgeben. Zunächst die Richtung, in die Sie sich bewegen möchten:
1 2 3
8 YOU 4
7 6 5
(9 ist ein No-Op, wenn Sie sich nicht bewegen möchten), zweitens eine von A
Tack, C
Counter oder N
etwas anderem (dies wird in Kürze näher erläutert), und die dritte Zeile ist eine beliebige Zeichenfolge mit einer Länge von bis zu 1024 Dies wird das Gedächtnis Ihres Bots sein. Sie können es für beliebige Zwecke verwenden oder leer lassen. Dieser Speicher ist dann die sechste Eingabezeile für Ihr Programm bei der nächsten Ausführung.
Alle weiteren Ausgabezeilen werden ignoriert, und wenn nur eine Zeile vorhanden ist, wird angenommen, dass die zweite leer ist.
Ziehen um
Der folgende Prozess wird verwendet, um festzustellen, wo Sie umgezogen sind:
- Wenn Sie sich bei
Ihrem Umzug in ein leeres Feld begeben ( ), wird Ihr Spieler in dieses Feld gestellt.
- Wenn Sie in einer Mauer landen (
#
), wird Ihr Zug ignoriert und Sie verlieren Ihren Zug. - Wenn Sie in einem Ei (
o
) oder auf einem Spieler (*
) landen , werden diese Informationen gespeichert und verwendet, nachdem alle umgezogen sind.
Nachdem alle umgezogen sind, werden Unklarheiten gelöst.
Wenn zwei Spieler auf dem gleichen Feld gelandet sind, kommt es zu einem Kampf! Hier wird die A
/ C
/ N
um Spiel kommt. A
ttack schlägt etwas N
anderes (normaler Angriff), N
ttack schlägt etwas C
anderes (man kann nichts kontern) und C
ttack schlägt etwas A
anderes (Gegenangriff). Der Spieler, der diesen Kampf gewinnt, bleibt auf seinem Feld und der Spieler, der verliert, kehrt zu dem ursprünglichen Feld zurück, auf dem er begonnen hat. Bei einem Unentschieden kehren beide Spieler zu ihrem ursprünglichen Standort zurück.
Wenn ein verlierender oder gebundener Spieler zu seinem ursprünglichen Platz zurückkehrt und dort ein anderer Spieler ist, gibt es keinen Kampf und der andere Spieler kehrt ebenfalls zu seinem ursprünglichen Platz zurück. Wenn dieses Feld einen anderen Spieler hat , geht dieser zurück und dies wird fortgesetzt, bis sich alle Spieler in verschiedenen Feldern befinden.
Wenn sich drei oder mehr Spieler auf einem Feld befinden, kehren alle zu ihren ursprünglichen Positionen zurück.
Wenn noch ein Spieler auf einem Ei steht ...
- Wenn der Spieler wählt
A
, wird das Ei zerstört. - Wenn der Spieler gewählt hat
C
, passiert nichts und der Spieler kehrt zu seinem ursprünglichen Platz zurück. - Wenn der Spieler gewählt hat
N
, nimmt der Spieler das Ei auf! Die Punktzahl des Spielers wird um eins erhöht und das Ei wird entfernt.
Sprachen
Sie können jede Sprache verwenden, die unter Windows, OSX und Linux frei verfügbar ist, um die Fairness zwischen den Teilnehmern zu gewährleisten. Wenn der Code nicht frei ausführbar ist, sondern kompiliert oder in ein Format gepackt werden kann, geben Sie dies bitte auch in Ihrer Antwort an. Wenn Sie Ihren Code in einer allgemeineren Sprache (z. B. CoffeeScript -> JavaScript) kompilieren können, tun Sie dies im Idealfall.
Wertung
Ihre Punktzahl ist die durchschnittliche Anzahl von Eiern, die Sie in zehn Läufen sammeln. Ein Lauf endet, wenn alle Eier eingesammelt sind oder die (number of entries * 25)
Züge abgelaufen sind. Ich werde manuell sicherstellen, dass es möglich ist, alle Eier für jede Karte zu erreichen (indem kontinuierlich Karten erstellt werden, bis alle Eier erreichbar sind).
Anzeigetafel
Eine Anzeigetafel wird hinzugefügt, wenn alle folgenden Bedingungen erfüllt sind:
- Es wurden mindestens sieben gültige Beiträge mit einer positiven oder Null-Punktzahl (nicht herabgestuft) eingereicht
- Mindestens 48 Stunden sind vergangen, seit diese Herausforderung erstellt wurde (UTC 14:23)
Die Regeln werden während dieser Vorwettbewerbsperiode nicht geändert, es sei denn, es wurde klargestellt, wo eine Regel unklar war. Sobald die Anzeigetafel erstellt ist, wird auch das Testprogramm hier veröffentlicht, damit Sie Ihre Eingaben testen können. Der Testcode dafür ist noch in Arbeit, aber er kann abgespielt werden und funktioniert. Hier ist das GitHub-Repo.
9
, kann er niemals sinnvoll angegriffen werden. Wenn ein anderer Spieler (B) das Feld dieses Spielers betritt und gewinnt, wird A auf das ursprüngliche Feld (das das gleiche ist) zurückgesetzt. Aber jetzt gibt es einen Konflikt, weil sowohl A als auch B da sind, also muss B zu seinem eigenen Feld zurückkehren. Das Ergebnis ist also unabhängig vom eigentlichen Kampf, B geht immer zum Ausgangsquadrat zurück und A bleibt immer gesetzt. Das würde mir erlauben, beides zu schreiben, was einem anderen Beitrag helfen könnte, indem ein Pfad für alle anderen blockiert wird.