Du bist eine Kugel Schleim. Natürlich möchten Sie als Schleim über so viel Fläche wie möglich sickern. Aber es gibt 3 andere Schleime, die genau dasselbe tun wollen. Wer wird der überlegene Schleim sein?
Beschreibung
Alle Schleime werden in einer Arena versammelt. Die Juroren (dh das Kontrollprogramm) werden eine vollständige Liste aller möglichen 4-Schleim-Kombinationen durchgehen, sie an den Ecken eines Tisches platzieren und beobachten, welcher Schleim über den größten Bereich austritt.
Ihre Schleime können in jeder Runde eine von drei Aktionen ausführen: Ausbreiten, Springen oder Zusammenführen. Weitere Beschreibungen zu diesen Bedeutungen finden Sie im Abschnitt Ausgabe .
Vorstand / Arena
Die Arena wird ein quadratisches Brett sein (derzeit 8x8, dies kann sich jedoch in Zukunft ändern). Hier ist ein Beispiel für eine Arena eines laufenden Spiels:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Schleim wird durch die Zahlen 1 bis 4 (Spieler 1 bis 4) dargestellt, und der leere Raum wird durch einen Punkt ( .
) dargestellt. Anfänglich ist der Spielplan leer, mit Ausnahme einer einzelnen Einheit Schleim von Spieler 1 in der oberen linken Ecke, Spieler 2 in der oberen rechten Ecke, Spieler 3 in der unteren linken Ecke und Spieler 4 in der unteren rechten Ecke.
Koordinaten werden zur besseren Lesbarkeit im Code durch einen 0-basierten Zeilen- und Spaltenindex dargestellt. Zum Beispiel repräsentieren die Koordinaten (3, 6) das 7. Quadrat in der 4. Reihe (im obigen Beispiel a 4
). (Dies erleichtert den Zugriff auf Quadrate:. board[coords.x][coords.y]
) Hier eine visuelle Darstellung:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Eingang
Die Eingabe Ihres Programms ist, welcher Spieler Sie sind (1, 2, 3 oder 4), ein Komma ( ,
), dann der Inhalt des Spielbretts / der Arena (wobei die Zeilenumbrüche durch Kommas ersetzt werden). Wenn Sie im obigen Szenario beispielsweise Spieler 3 wären, wäre Ihre Eingabe:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Ausgabe
Ihr Programm muss 4 Ganzzahlen ausgeben. Die ersten beiden sind der Zeilen- und Spaltenindex des Schleims, den Sie verschieben möchten, und die nächsten beiden sind der Zeilen- und Spaltenindex, in den Sie sie verschieben möchten.
In jeder Runde haben Sie drei Möglichkeiten: Ausbreiten, Springen oder Zusammenführen.
Verbreitung
Zum Ausbreiten müssen die Zielkoordinaten genau ein Quadrat vom zu bewegenden Schleim entfernt sein, und das Quadrat an den Zielkoordinaten muss ein leeres Feld sein. Beim Verteilen wird an den Zielkoordinaten ein neuer Schleim erzeugt und der alte Schleim nicht entfernt. Nachdem der neue Schleim erzeugt wurde, werden alle feindlichen Schleime auf den 8 Feldern um diesen neuen Schleim in den Spieler umgewandelt, der sich bewegt hat.
Wenn beispielsweise bei der Tafel in 1 Spieler 1 ausgeben würde
0 1 1 2
, wäre das Ergebnis die Tafel in 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Springen
Zum Springen müssen die Zielkoordinaten genau zwei Quadrate vom zu bewegenden Schleim entfernt sein, und das Quadrat an den Zielkoordinaten muss ein leeres Feld sein. Beim Jupming wird an den Zielkoordinaten ein neuer Schleim erzeugt und der alte Schleim entfernt. Nachdem der neue Schleim erzeugt wurde, werden alle feindlichen Schleime auf den 8 Feldern um diesen neuen Schleim in den Spieler umgewandelt, der sich bewegt hat.
Wenn beispielsweise bei der Tafel in 1 Spieler 1 ausgeben würde
0 1 2 3
, wäre das Ergebnis die Tafel in 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Verschmelzen
Zum Zusammenführen müssen die Zielkoordinaten genau ein Quadrat vom zu bewegenden Schleim entfernt sein, und das Quadrat an den Zielkoordinaten muss der Schleim desselben Spielers sein. Beim Verschmelzen wird der alte Schleim entfernt. Dann werden alle leeren Felder in den 8 Feldern um den Zielschleim in den Spieler umgewandelt, der sich bewegt hat (ohne den alten Schleim, der bewegt wird).
Wenn beispielsweise bei der Tafel in 1 Spieler 1 ausgeben würde
0 1 1 2
, wäre das Ergebnis die Tafel in 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Sie können auch übergeben, indem Sie einfach ungültige Koordinaten (z. B. 0 0 0 0
) ausgeben .
Regeln und Einschränkungen
Zusätzliche Regeln sind:
- Sie können Dateien in Ihrem eigenen Ordner lesen und schreiben, um die Daten zu erhalten (die Übermittlungen werden in gespeichert
players/YourBotName/yourBotName.language
). Sie dürfen jedoch keine anderen Elemente außerhalb des Ordners ändern oder darauf zugreifen. Internetzugang ist verboten. - Ihre Einreichung ist möglicherweise nicht speziell codiert, um einer anderen Einreichung zu helfen oder sie zu verletzen. (Möglicherweise haben Sie mehrere Einreichungen, diese dürfen jedoch in keiner Weise spezifisch miteinander interagieren.)
- Ihre Einreichung darf nicht länger als 0,1 Sekunden pro Runde dauern. Wenn Ihre Übermittlung gelegentlich 0,105 Sekunden dauert, ist dies in Ordnung, es kann jedoch sein, dass dies nicht immer wesentlich länger dauert als dieses Zeitlimit. (Dies ist hauptsächlich eine Überprüfung der Gesundheit, um zu vermeiden, dass das Testen zu lange dauert.)
- Ihre Einreichung darf kein genaues Duplikat (dh dieselbe Logik) einer anderen sein, auch wenn sie in einer anderen Sprache verfasst ist.
- Ihre Einreichung muss eine seriöse sein. Dies ist meinungsbasiert, aber wenn Ihr Beitrag eindeutig nicht versucht, die Herausforderung zu lösen (z. B. wenn Sie jede Runde bestehen), wird er disqualifiziert.
Wenn Ihr Beitrag gegen eine dieser Regeln verstößt oder nicht der Spezifikation entspricht, wird er disqualifiziert, entfernt playerlist.txt
und das Spiel wird von Anfang an neu gestartet. Wenn Ihr Beitrag disqualifiziert wird, hinterlasse ich einen Kommentar zu Ihrem Beitrag, in dem erläutert wird, warum. Andernfalls wird Ihr Beitrag zur Bestenliste hinzugefügt. (Wenn Sie Ihren Beitrag nicht in der Bestenliste sehen, keinen Kommentar zu Ihrem Beitrag haben und Ihren Beitrag vor der unten angegebenen "Zuletzt aktualisiert" -Zeit gepostet haben, sagen Sie mir bitte, dass ich ihn möglicherweise versehentlich übersehen habe.)
Bitte fügen Sie Ihrem Beitrag bei:
- Ein Name.
- Ein Shell - Befehl Ihres Programm (zum Beispiel laufen
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, etc.).- Beachten Sie, dass die Eingabe (Ihr Player und Ihre Karte) als Befehlszeilenargument an diese angefügt wird.
- Programme werden unter Ubuntu 14.04 getestet, stellen Sie also sicher, dass Ihr Code (frei) darauf ausgeführt werden kann.
- Eine Versionsnummer, wenn Ihr Code in verschiedenen Versionen Ihrer Sprache unterschiedlich funktioniert.
- Der Code Ihres Bots.
- Anweisungen zum Kompilieren des Codes, falls erforderlich.
Controller Code / Testing, Beispiel Bot
Der Controller-Code ist in C ++ geschrieben und auf Github zu finden . Weitere Anweisungen zum Ausführen und Testen Ihres Codes finden Sie dort.
simplebot.rb
, ein sehr einfacher Bot, der in jeder Runde einen zufälligen Schleim zu einem zufälligen Ort verbreitet oder springt, ist auch auf Github veröffentlicht .
Wertung und Bestenliste
Wenn alle Felder auf dem Spielplan ausgefüllt sind, endet das Spiel und die Punktzahl wird berechnet. Die endgültige Punktzahl eines Spielers ist die Anzahl der Felder, auf denen sich am Ende des Spiels der Schleim befindet. Wenn 2000 Runden vergangen sind (500 für jeden Spieler) und das Spiel noch nicht beendet ist, endet das Spiel trotzdem und die Punkte werden gemeldet, als ob das Spiel beendet wäre.
Am Ende des Turniers werden die Ergebnisse aller Spiele gemittelt, um das Endergebnis jedes Spielers zu berechnen, das auf der Rangliste veröffentlicht wird. Es gibt keine Einreichungsfrist; Ich werde die Bestenliste regelmäßig aktualisieren, sobald neue Beiträge eingehen.
Es sind 4 Einsendungen erforderlich, bis eine echte Bestenliste angezeigt wird.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Letzte Aktualisierung: 22. Juli, 22:27 Uhr (UTC).
quelle
Antworten:
GreedySlime
Führt einfach den Zug aus, der den größten Nettogewinn an Schleimeinheiten erzielt.
Beachten Sie, dass dies in Python 2.x geschrieben ist .
Beispiellauf (unter Verwendung des in der Challenge-Beschreibung angegebenen Beispiels und unter der Annahme, dass der Code in einer Datei mit dem Namen gespeichert ist
slime.py
):quelle
Flaches Blau
Shallow Blue versucht herauszufinden, was in Zukunft passieren könnte, indem er eine
erschöpfendeBaumsuche nach möglichen Zügen durchführt. Leider kommt er nicht weiter als bis zu seinem nächsten Zug. Er schlägt dann nach seinem nächsten Zug eine halbe Punktzahl auf jeden möglichen Brettstatus, berechnet eine Punktzahl für jeden einzelnen Zweig mit einer ebenso lächerlichen Formel und: voila, der ideale Zug ist bekannt!BEARBEITEN: Der ursprüngliche Code lief zu langsam, so dass ich ihn so modifiziert habe, dass er nur eine zufällige Auswahl aller möglichen Züge enthält. Es werden fast alle Züge ausprobiert, wenn wenig Züge möglich sind, und ein kleinerer Prozentsatz, wenn mehr Züge möglich sind.
quelle
Jumper
Springt am liebsten zur Mitte.
Wird vergehen, wenn kein Schleim springen kann.
C ++ , sollte einfach mit kompilieren
g++ jumper.cpp -o jumper
Entschuldigung, ich habe Ihre Zugbestätigung gestohlen. Außerdem habe ich gleich nach dem Start die korrekte Codierung aufgegeben, also schau nicht hin. Es scheint jedoch auf jeder Brettgröße zu laufen.
quelle
DeathSlime :
Beschreibung : Versucht, den schwächsten Feind zu jagen und zu vernichten. Wiederholen.
Wie laufen : Rubin DeathSlime.rb
Ruby-Version : 2.1.2
quelle
Flechte
Dies ist ein in R geschriebener Bot. Er muss mit ausgelöst werden
Rscript Lichen.R
.Der beabsichtigte Algorithmus ist, dass versucht wird, einen rechteckigen Bereich abzudecken (Füllen der Lücke mit
spread
). Wenn das Rechteck fertig ist, werdenmerges
die beiden Schleime an einer der Ecken (der am weitesten von der Ecke des Bretts entfernte) entfernt, um den "bewohnbaren" Bereich zu erweitern. Anschließend wird das neu definierte Rechteck gefüllt usw. Wird nicht verwendetjump
.Befindet sich ein Feind in dem bewohnbaren Gebiet und befindet sich dort auch ein leerer Raum, füllt er den leeren Raum daneben. Wenn der Schleim, in den beim Erweitern des bewohnbaren Gebiets eingearbeitet werden soll, von Feinden umgeben ist,
spread
verschmilzt statt dieses nur ein Schleim .quelle
0 0 0 0
wenn kein Schleim mehr an Bord ist.CornerSlime
Dieser Schleim hat eine Ahnung von Ecken, oder zumindest, als ich ihn zum ersten Mal in C # schrieb, bin ich mir nicht mehr ganz sicher.
In C ++ geschrieben, wird es vermutlich gut mit gcc und ohne Argumente kompiliert. hoffentlich habe ich aus Versehen nichts MSVC-spezifisches verwendet.
Ausschließlich gegen sich selbst auf einem modifizierten Server getestet (kein schicker neuer C ++ - Compiler, auf dem ich mich befinde), sodass ich keine Ahnung habe, wie er sich verhalten wird. Hoffentlich wird er nicht dafür disqualifiziert, dass er zu langsam ist. Es gibt derzeit keine Zufälligkeit in diesem Bot, aber ich kann einige zu einem späteren Zeitpunkt hinzufügen.
Dies ist C #, das von jemandem nach C ++ portiert wurde (aus Gründen der Geschwindigkeit), der C ++ nicht wirklich kennt und entsetzlich ist. Es beginnt mit dem Aufbau einer Reihe von Zellen, die dann mit allerlei nicht nützlichen Informationen über die umliegenden Zellen gefüllt werden (Anzahl meiner Zellen, Anzahl meiner Schleime, so etwas). Anhand dieser Informationen wird dann entschieden, ob die Informationen, die zum Erstellen dieser Informationen verwendet wurden, genauer untersucht werden müssen. Anschließend werden diese Informationen möglicherweise verwendet, um eine aussagekräftige Ausgabe zu erstellen.
quelle