In der Zukunft, in der Time Travel (abgekürzt als TT) weit verbreitet sein wird, wird das Werfen von Münzen ein ernstzunehmender Gedankensport. Um uns auf die Zukunft vorzubereiten, veranstalten wir einen Wettbewerb für Programme, bei denen Zeitreisen aus Sicht der Beiträge wirklich stattfinden.
Der Wettbewerb ist im Round-Robin-Stil und besteht aus Münzwurfspielen zwischen Java-Klassen.
Regeln des Münzwurfspiels
- Es gibt zwei Spieler und 100 Runden.
- In jeder Runde wird eine Münze geworfen und basierend auf dem Ergebnis erhält einer der Spieler 1 Punkt. Jeder Spieler hat eine 50% ige Chance, einen Punkt zu erzielen.
- Nach dem Werfen haben beide Spieler die Möglichkeit, die Zeit durch Ziehen der Hebel zu kontrollieren.
- Wenn Sie einen blauen Hebel (Revert Stopper) ziehen, ist kein TT mehr möglich, um den Hebel oder eine frühere Runde zu drehen. Der Versuch von TT, an diesen Runden teilzunehmen, hat keine Wirkung.
- Wenn Sie einen roten Hebel ziehen , versuchen Sie, die Zeit auf eine frühere Runde zurückzustellen. Bei Erfolg wird das Gedächtnis des Gegners vor der gewählten Runde auf sein Gedächtnis zurückgesetzt und die Münzwurfergebnisse ab der gewählten Runde werden ebenfalls gelöscht . Das einzig mögliche Zeichen für Ihren Gegner in Bezug auf den TT ist die Anzahl der nicht verwendeten Hebel, die nicht zurückgesetzt werden.
- Jeder Spieler hat zu Beginn des Spiels 5 blaue und 20 rote, nicht benutzte Hebel. Diese Hebel werden von TTs nicht beeinflusst.
- Wenn am Ende einer 100. Runde kein TT stattfindet, endet das Spiel und der Spieler mit der höheren Punktzahl gewinnt.
Einzelheiten
- Runden haben eine 1-basierte Indizierung (Form 1 bis 100).
- Vor der Runde erhalten
x
Sie die Anzahl der verfügbaren blauen und roten Hebel, die Münzwurfergebnisse bis zum Zugx
(einschließlich) und die Erinnerung an Ihren (letzten)x-1
Runde. - Das Ziehen eines blauen Hebels in der Runde
x
stoppt alle TTs, die ein Ziel in der Rundex
oder davor haben (es blockiert eine TT, wenn es genau in dieser Runde auch passiert). - Zurück zur Runde
x
bedeutet, dass die nächste Runde rund istx
. - Wenn beide Spieler am Ende einer Runde zurückkehren, wird die Zeit auf das frühere Ziel zurückgesetzt, das nicht gesperrt ist. Die Spieler, die versucht haben, zu dieser Zeit zurückzukehren, behalten ihr Gedächtnis.
Technische Details
- Sie sollten eine Java-Klasse schreiben, die die bereitgestellte Bot-Schnittstelle implementiert.
- Fügen Sie Ihren Bot zum Projekt hinzu.
- Fügen Sie eine Instanz Ihres Bots zu der
Bot
in der Datei hinzuController.java
. - Ihre Klasse sollte keine Informationen zwischen Anrufen speichern . (In den meisten Fällen wird
final
diese Anforderung erfüllt, wenn nur Variablen außerhalb von Funktionen vorhanden sind.) - Sie können dem Controller im
memory
Feld Ihres zurückgegebenenAction
Objekts Informationen geben . Dies wird dir in der nächsten Runde zurückgegeben, wenn kein TT passiert ist. Wenn ein TT passiert, erhalten Sie die entsprechende frühere Erinnerung von Ihnen. - Sie können die
totalScore()
Methode derGame
Klasse verwenden, um die Bewertung einer Verlaufszeichenfolge abzurufen.
Protokoll
An jeder Ecke wird Ihre
takeTurn(...)
Methode mit 5 Argumenten aufgerufen:- die Anzahl der nicht verwendeten blauen Hebel
- die Anzahl der nicht verwendeten roten Hebel
- Die Münzwurfhistorie ist eine Zeichenfolge aus 1 und 0, die Ihre Gewinne und Verluste in den vorherigen Runden kennzeichnet. Das erste Zeichen entspricht dem ersten Münzwurf. (In der ersten Runde beträgt die Länge der Saite
1
.) - eine Zeichenfolge, Ihre gespeicherte Erinnerung aus der vorherigen Runde
- der 1-basierte Index dieser Runde
Bei jedem Zug gibt Ihre Methode ein
Action
Objekt zurück, das enthälteine Ganzzahl in dem
move
Feld, das Ihre Aktion beschreibt:0
für keine aktion-1
einen blauen Hebel zu ziehen und TTs zu blockieren, die diese Runde durchlaufen- Eine positive ganze Zahl
x
, die nicht größer als die aktuelle Runde ist, um einen roten Hebel zu ziehen und zu versuchen, wieder zur Runde zurückzukehrenx
- Ungültige Ganzzahlen werden als behandelt
0
.
eine Zeichenfolge mit Ihrem Gedächtnis aus dieser Runde, die Sie beibehalten möchten. Beachten Sie, dass das Speichern von Speicherplatz kein wesentlicher Bestandteil der Herausforderung ist . Sie können gute Eingaben machen, ohne nützliche Daten in der Zeichenfolge zu speichern. In der ersten Runde ist die Zeichenfolge eine leere Zeichenfolge.
Ihre Methode sollte im Durchschnitt nicht länger als 10 ms pro Runde dauern.
- Regelmäßiges Nichteinhalten der Frist führt zur Disqualifikation.
Wertung
- Wenn Sie ein Match gewinnen, erhalten Sie 2 Punkte und ein Unentschieden 1 Punkt für beide Spieler. Verlust verdient keine Punkte.
- Die Punktzahl eines Bots ist die Gesamtzahl der gesammelten Punkte.
- Die Anzahl der Matches, die zwischen jedem Teilnehmerpaar ausgetragen werden, hängt von der Anzahl der Einsendungen und ihrer Geschwindigkeit ab.
Zwei einfache Beispiel-Bots werden als Antworten gepostet.
Der Controller und die ersten paar Bots sind hier verfügbar .
Testergebnisse mit bis zum 3. November eingereichten Bots:
Gesamtpunktzahl:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Der Controller basiert auf dem Controller der Cat Catcher Challenge . Vielen Dank, dass @flawr ihn als Basis für diesen verwendet hat.)
Bonus: Ein schöner 6-minütiger Film, der auf einem ähnlichen Konzept basiert.
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
Was ist "eine Runde durchmachen"?