Endgültige Ergebnisse verfügbar
Einführung
Nach meinem vorherigen KOTH mit heftigen Themen ( Fantasiekrieg , weltweite Pandemie ...) bin ich mit einem neuen unbeschwerten Spiel zurück. Dieses Mal stehen Sie vor einer Situation, die einem Brettspiel ähnelt. Ein Stapel umgedrehter Münzen wird in die Mitte eines wirklich großen Tisches gelegt, und Sie sind entschlossen, Ihren Anteil an der Beute zu bekommen!
Glossar
Münzen : Marken, die entweder umgedreht oder nicht umgedreht werden können.
Nicht gekippt : Münzen werden mit dem Wert nach unten auf den Tisch gelegt. Dies ist der Standardstatus der Münzen.
Umgedreht : Münzen werden mit ihrem Wert nach oben auf den Tisch gelegt.
Lokal : Bezieht sich auf Ihren Stapel Münzen.
Global : Bezieht sich auf den Stapel Münzen in der Mitte.
Prinzip
Zu Beginn des Spiels beginnt jeder Spieler mit 0 Punkten und 0 Münzen (umgedreht oder nicht umgedreht). Das Spiel ist rundenbasiert. Während ihres Zuges können die Spieler bis zu drei Aktionen ausführen, die entweder mit dem Münzstapel in der Tischmitte, ihrem eigenen Münzstapel oder mit anderen Spielern interagieren.
Die Spielreihenfolge wird zu Beginn des Spiels zufällig festgelegt. Die Reihenfolge der Spieler in der Argumentliste stellt die Zugreihenfolge dar und geht in dieser Liste von links nach rechts. "Weiter" und "Zurück" beziehen sich jeweils auf "rechts in dieser Liste" und "links in dieser Liste" mit einer Schleife, wenn Sie der letzte von beiden Seiten sind.
Das Spiel dauert 50 Runden oder bis sich am Ende eines Spielzuges in der Mitte 0 Münzen befinden (was bedeutet, dass Sie Ihre 3 Aktionen beenden, auch wenn der Stapel nach Ihrer ersten Aktion leer ist, und Sie können die zu lassenden Münzen zurücklegen das Spiel geht weiter). Die Startzahl der globalen Münzen wird zufällig mit dieser Formel definiert:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Jede Aktion bringt Ihnen Punkte (oder bringt Sie dazu, einige zu verlieren) und am Ende des Spiels wird jede Münze, die Sie haben, Ihren Punkten hinzugefügt ( -1 für nicht umgedreht, +2 für umgedreht ). Der Spieler mit der höchsten Punktzahl gewinnt.
Die Steuerung stellt Ihnen die Eingabe über Befehlsargumente zur Verfügung und Ihr Programm muss über stdout ausgeben.
Syntax
Eingang
Jedes Mal, wenn Ihr Programm aufgerufen wird, erhält es Argumente in folgendem Format:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Runden sind 1-indiziert.
Beispiel Eingabe
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Hier sehen Sie, dass es die 6. Runde ist und Sie Spieler 2. Es befinden sich 52 Münzen auf dem Mittelstapel. Sie haben 12 Punkte, 1 eingeworfene Münze und 0 nicht eingeworfene Münze. Punkte können negativ sein.
Ausgabe
Sie müssen drei Zeichen (kein Leerzeichen, kein Trennzeichen) ausgeben, die jeweils einer Aktion entsprechen, die Sie in diesem Zug ausführen. Die Reihenfolge der Zeichen bestimmt die Reihenfolge der Aktionen. Sie können die gleichen Aktionen mehrfach ausgeben. Falls nicht genügend Münzen vorhanden sind, um Ihre Aktion abzuschließen, werden die maximal verfügbaren Münzen und Zählpunkte nur für die verwendeten Münzen verwendet.
N
: Mach nichts
1
: Nimm 1 Münze vom Mittelstapel [Effekte: +1 lokal nicht geworfen / -1 Punkt / -1 global nicht geworfen]
2
: Nimm 2 Münzen vom Mittelstapel [Effekte: +2 lokal nicht geworfen / -2 Punkte / -2 global unflipped]
3
: Nimm 3 Münzen vom zentralen Stapel. [Effekte: +3 lokaler unflipped / -3 Punkte / -3 globaler unflipped]
A
: Lege 1 Münze von deinem Stapel zurück. [Effekte: -1 lokaler unflipped / +1 Punkt / +1 global nicht gewendet]
B
: Lege 2 Münzen von deinem Stapel zurück [Effekte: -2 lokal nicht gewendet / +2 Punkte / +2 global nicht gewendet]
C
: Lege 3 Münzen von deinem Stapel zurück [Effekte: -3 lokal nicht gewendet / +3 Punkte / +3 global unflipped]
X
: Entferne 1 Münze von deinem Stapel[Effekte: -1 lokaler nicht umgedrehter Punkt / 0 Punkte]
Y
: Entferne 2 Münzen von deinem Stapel. [Effekte: -2 lokaler nicht umgedrehter Punkt / 0 Punkte]
Z
: Entferne 3 Münzen von deinem Stapel. [Effekte: -3 lokaler nicht umgedrehter Punkt / 0 Punkte]
R
: Drehe Münzen zum vorherigen Spieler [Effekte: -1 Punkt pro nicht umgedrehtem Empfang, +2 Punkte pro umgedrehtem Empfang / gilt für alle Spieler]
T
: Münzen zum nächsten Spieler umdrehen [Effekte: -1 Punkt pro nicht umgedrehtem Empfang, +2 Punkte pro umgedrehtem Empfang / gilt für alle Spieler]
F
: Wirf 1 Münze um [Effekte: -1 lokaler nicht umgedrehter / +1 lokaler nicht umgedrehter / +2 Punkt]
U
: Wirf 1 Münze um [Effekte: +1 lokaler nicht umgedrehter / -1 lokaler nicht umgedrehter / -2 Punkt]
Beispielausgabe
2FF
: Nimmt zwei Münzen und wirft zwei Münzen -2 + 2 + 2 = 2 points
Wenn Ihre Ausgabe falsch ist, übernimmt der Controller NNN
.
Regler
Sie finden den Controller auf GitHub . Es enthält auch zwei in Java geschriebene Beispielbots. Überprüfen Sie das Projekt, und öffnen Sie es in Ihrer Java-IDE, damit es ausgeführt wird. Der Einstiegspunkt in die main
Methode der Klasse Game
. Java 8 erforderlich.
Zum Hinzufügen von Bots benötigen Sie zunächst entweder die kompilierte Version für Java (.class-Dateien) oder die Quellen für interpretierte Sprachen. Platzieren Sie sie im Stammverzeichnis des Projekts. Erstellen Sie dann eine neue Java-Klasse im players
Paket (Sie können ein Beispiel für die bereits vorhandenen Bots verwenden). Diese Klasse muss implementiert werden Player
, um die Methode zu überschreiben String getCmd()
. Der zurückgegebene String ist der Shell-Befehl zum Ausführen Ihrer Bots. Sie können zum Beispiel eine Ruby - Bot Arbeit mit diesem Befehl machen: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Zum Schluss fügen Sie den Bot in das Players-Array oben in der Game
Klasse ein.
Regeln
- Bots sollten nicht geschrieben werden, um bestimmte andere Bots zu schlagen oder zu unterstützen.
- Das Schreiben in Dateien ist erlaubt. Bitte schreibe an "yoursubmissionname.txt", der Ordner wird vor Spielbeginn geleert. Andere externe Ressourcen sind nicht zulässig.
- Ihr Beitrag hat 1 Sekunde Zeit, um zu antworten.
- Stellen Sie Befehle zum Kompilieren und Ausführen Ihrer Übermittlungen bereit.
Unterstützte Sprachen
Ich werde versuchen, jede Sprache zu unterstützen, aber sie muss kostenlos online verfügbar sein. Bitte geben Sie Anweisungen für die Installation, wenn Sie keine "Mainstream" -Sprache verwenden.
Ab sofort kann ich Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11 ausführen.
Endgültige Ergebnisse
Dies sind die Ergebnisse von 100 Spielen (Punkte werden addiert):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Einzelne Ergebnisse der Spiele finden Sie hier: http://pasted.co/63f1e924 (mit Startmünzen und Anzahl der Runden pro Spiel).
Der Gewinner erhält eine Prämie von 50 Reputationen: Bird In The Hand von Martin Büttner .
Vielen Dank für Ihre Teilnahme, bis zum nächsten KOTH ~