Einführung
Sie sind mit einigen Dienern auf einer einsamen Insel gestrandet und suchen nach Schätzen. Je länger man sucht, desto mehr Schätze findet man. Je weniger Leute suchen, desto mehr findet jede Person.
Aufgrund der begrenzten Vorräte hat der Vorsitzende beschlossen, dass ein paar Menschen, bis zu einem Viertel der Gruppe, jede Nacht sterben sollen. Er hat beschlossen, niemandem genau zu sagen, wie viele Menschen an einem bestimmten Tag im Voraus sterben sollen.
Sie haben die Kontrolle über eine kleine Gruppe von 5 Personen, die sich aus dem Lager wagen sollen, um einen Schatz für Sie zu finden.
Zielsetzung
Das Ziel dieses Wettbewerbs ist es, so viel Schatz wie möglich anzuhäufen. In jeder Runde, in der deine Diener nicht versuchen, ins Lager zurückzukehren, werden sie eine bestimmte Anzahl von Schätzen finden. Ihre Diener können zu unterschiedlichen Zeiten ins Lager zurückkehren.
In jeder Runde, in der ein Arbeiter draußen bleibt, um nach Schätzen zu suchen, findet der Arbeiter 1+R
Schätze, in denen R
sich die Anzahl der Arbeiter (aller Bots) befindet, die bereits im Lager sind. Tote Bots werden bei dieser Berechnung nicht berücksichtigt.
Zu Beginn eines jeden Tages wird eine Zufallszahl ( n
) von 2
bis max(3, floor(num_live_players/4))
ausgewählt. (Für 10 Spieler an Tag 1, das ist 2
zu max(3,50/4)=12
. Für 20 Spieler an Tag 1, das wäre 2
zu max(3,100/4)=25
.) Diese Zahl die Anzahl der Spieler darstellt , die für diesen Tag sterben gelassen werden, und wird nicht zu Ihrem Programm gegeben werden .
Wenn ein Diener einer der letzten n
Personen ist, die zurückkehren, stirbt er / sie und kann den Schatz, den er / sie gefunden hat, nicht in Ihren Besitz überführen. Außerdem kann der Diener für den Rest des Abenteuers nicht an der Schatzsuche teilnehmen.
Ihre Endpunktzahl ist die durchschnittliche Menge an Schätzen, die Sie pro Abenteuer erhalten haben (Run of the Controller).
Wenn mehr Leute versuchen, im selben Zug ins Lager zurückzukehren, als Plätze frei sind, bestimmen Zufallszahlen, wer reinkommt und wer stirbt.
Ein Tag auf dieser Insel von Sonnenaufgang bis Sonnenuntergang dauert 30 Runden. Da es nachts viele gefährliche Tiere gibt, können Sie das Camp nicht betreten, wenn Sie bei Sonnenuntergang nicht zurückkehren.
Input-Output
Ihr Programm sollte für die gesamte Simulation ausgeführt werden.
Zu Beginn der Simulation INDEX I
wird eingegeben, wo I
sich der Index Ihres Bots befindet (dieser Index wird von 1 aufwärts gezählt).
Zu Beginn eines jeden Tages START_DAY D/N
wird Ihr Programm eingegeben werden, wobei D
die Tageszahl ist (ab 1
), und N
ist gleich max(3, floor(num_live_players/4))
, die die maximale Anzahl von Menschen, die an diesem Tag sterben.
Zu Beginn jeder Abbiegung START_TURN T
wird in Ihr Programm eingegeben, wo T
die Abbiegungsnummer steht (ab 1
).
Sobald Ihr Programm dies erhält, sollte es mit einer Liste der Bewegungen Ihrer Diener antworten, die durch ein Komma getrennt sind.
Gültige Züge sind:
R
: Versuchen Sie, zum Lager zurückzukehren.S
: Bleib auf der Suche nach Schätzen.N
: Diener ist bereits tot oder im Lager.
Wenn Sie einen ungültigen Zug eingeben, wird dies so interpretiert, als S
ob der Bot am Leben ist und sich nicht im Camp befindet N
.
Am Ende jeder Runde wird eine Zeichenfolge an Ihr Programm übergeben:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
Die Bewegungen der Diener jedes Bots werden durch Kommas getrennt.
Diese Züge werden eine der folgenden sein:
R
: In dieser Runde erfolgreich ins Camp zurückgekehrt.r
: In dieser Runde konnte ich nicht ins Lager zurückkehren.S
: Immer noch auf der Suche nach einem Schatz.D
: Gestorben in einer früheren Runde.N
: Schon wieder im Camp.
Bots und Servants bleiben während der gesamten Simulation in derselben Reihenfolge.
Beispielsweise:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
Hier sind Sie der zweite Bot ( r,r,r,r,r
), der versucht hat, alle vier noch lebenden Diener zurückzugeben (und bei allen vier leider gescheitert ist). Die Diener von Bot 1 sind alle wieder im Lager. Bot 3 hat drei tote Diener, einen weiteren im Lager und einen fünften, der erfolgreich zurückgekehrt ist. Bot 4 hat einen Diener, der geblieben ist (und sterben wird, da dies die letzte Runde eines Tages ist), einen Diener im Lager und drei tote Diener.
Nach jeder dieser Zeichenfolgen wird, sofern nicht auch eine Zeichenfolge ausgegeben wird, die das Ende des Tages anzeigt (siehe unten), der nächste Zug Ihrer Diener durch Kommas getrennt ausgegeben. Alle Bediensteten müssen zur Rechenschaft gezogen werden (mit, N
wenn sie bereits im Lager sind und D
wenn sie bereits tot sind). Ungültige Züge werden so behandelt, als S
wäre der Diener noch nicht im Lager / tot. Beispiel:
N,N,S,S,R
was bedeutet:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
Am Ende eines Tages wird die folgende Zeichenfolge nach der END
Zeichenfolge der letzten Runde übergeben , um alle zu informieren, wer am Leben ist:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
wobei der Status eine durch Kommas getrennte Liste von entweder A
(lebendig) oder D
(tot) ist. Der folgende Tag beginnt unmittelbar danach.
Die Simulation endet, wenn weniger als 6 lebende Bedienstete anwesend sind. Ihr Programm erhält am Ende der Simulation folgende Eingabe:
EXIT
Regeln / Details
- Nur in Kurven, in denen du aktiv
S
bist, wirst du einen Schatz finden. - Anzahl der durchgeführten Simulationen: 1000 Mal
- Ihr Programm sollte nicht länger als 1 Sekunde dauern, um Bewegungen zu bestimmen.
- Ihr Programm sollte nicht vorzeitig beendet werden. es wird genau einmal gestartet.
- Stellen Sie sicher, dass der Ausgabepuffer (falls zutreffend) nach jeder Ausgabe geleert wird.
- Dateien können in den Ordner Ihres Bots geschrieben werden (
./players/BotName/
). Der Name Ihres Bots ist der Name Ihres Bots, wobei alle nicht alphanumerischen Zeichen entfernt und in CamelCase geschrieben wurden. Einträge können Daten zwischen den Läufen der Steuerung speichern, da die Läufe nacheinander ausgeführt werden. - Ihr Programm muss nach dem Empfang beendet werden
EXIT
. - Programme, die keine Fehler kompilieren oder werfen oder ungültigen Text ausgeben (nicht im Format von 5 durch Kommas getrennten Zeichen), können vom Wettbewerb ausgeschlossen werden. Jedem Ausgang muss ein Zeilenumbruch folgen.
- Der Controller befindet sich auf GitHub .
Bitte geben Sie den Bot-Namen, die Sprache + Version, den Code und den Befehl an, um den Bot zu kompilieren (falls zutreffend) und auszuführen.
Beispiel
Dem vom Programm ausgegebenen Text wird hier ein vorangestellt >
. Ihr Programm sollte dieses Zeichen nicht ausgeben.
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
Die Bewertungen für das obige Beispiel sind:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
Der Gewinner ist daher der Spieler, Bot 2. Beachten Sie, dass der Gewinner nicht bis zum absoluten Ende überleben muss. (Beachten Sie auch, dass der Spieler bis zum 30. Spieltag am 1. Tag bleiben könnte, da das Lager nicht voll wäre, bis der Spieler einen weiteren Bot zurückgeschickt hat.)
Scores
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
Protokolle sind auf GitHub verfügbar . Die Ergebnisse für jeden Versuch sind in dieser Google-Tabelle verfügbar .