HINWEIS : Der Gewinner dieses Wettbewerbs ist Jack !!!. Weitere Einsendungen werden nicht akzeptiert.
Hier ist der Chatroom für diese King-of-the-Hill- Herausforderung. Dies ist meine erste, also bin ich offen für Vorschläge!
Reaper ist ein Spielkonzept, das von der Art of Problem Solving entwickelt wurde und Geduld und Gier beinhaltet. Nachdem Sie das Spiel an einen KOTH-Wettbewerb angepasst haben (Vielen Dank an @NathanMerrill und @dzaima für Ihre Vorschläge und Verbesserungen), ist hier die Herausforderung.
Das Spiel funktioniert wie folgt: Wir haben einen Wert, der als Reap bezeichnet wird und mit jeder Zecke mit einer gegebenen Konstante multipliziert wird. Nach jedem Tick hat jeder Bot die Möglichkeit zu "ernten", was bedeutet, dass der aktuelle Wert von Reap zu seiner Punktzahl addiert wird und Reap auf 1 reduziert wird.
Es gibt jedoch eine feste Anzahl von Ticks, die ein Bot zwischen den "Ernten" warten muss, und eine feste Anzahl von Punkten, die erforderlich sind, um das Spiel zu gewinnen.
Einfach genug? Hier sind Ihre Eingaben:
I / O
Sie müssen in Python 3 eine Funktion schreiben, die 3 Eingaben akzeptiert. Der erste wird self
zum Referenzieren von Klassenobjekten verwendet (wird später angezeigt). Der zweite ist der Reap
aktuelle Wert der Ernte, den Sie verdienen würden, wenn Sie "ernten" würden. Das dritte ist prevReap
eine Liste der Bots, die während des vorherigen Ticks geerntet haben.
Andere Objekte, auf die Sie in Ihrer Funktion zugreifen können:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
Sie MÜSSEN nicht irgendwas vom Inhalt dieser Objekte bearbeiten, mit Ausnahme self.obj
.
Sie müssen ausgeben 1
, um zu ernten, und alles andere (oder nichts), um nicht zu ernten. Beachten Sie, dass ich die Tatsache, dass Sie sich für das Ernten entschieden haben, ignoriere, wenn Sie ernten, wenn Sie nicht genügend Zecken gewartet haben.
Regeln
Die Parameter I verwenden werden sind winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
wo x
die Anzahl der Bots in der KOTH.
- Das Spiel endet, wenn ein Spieler (oder mehrere) die Siegpunktzahl erreicht hat.
- Wenn mehrere Bots gleichzeitig um die Ernte bitten, erhalten die Bots, die länger gewartet haben, Vorrang (bei Gleichstand dürfen die Bots, die die maximale Zeit gewartet haben, alle ernten und die Punkte im Reap sammeln).
- Ihr Bot darf im Durchschnitt über 5 Ticks nicht mehr als 100 ms benötigen.
- Wenn Sie Bibliotheken importieren möchten, fragen Sie! Ich werde versuchen, alle Bibliotheken hinzuzufügen, die ich auf meiner Desktop-Version von Python ausführen kann (Mathe ist bereits importiert: zögern Sie nicht, es zu verwenden).
- Alle Standardlücken für KoTHs, wie doppelte Bots, 1-up-Bots usw., sind auf ähnliche Weise gesperrt.
- Alle Bots, die eine beliebige Art von Zufälligkeit verwenden, müssen die von
getRandom
mir bereitgestellte Funktion verwenden.
Sie finden den Controller im TIO-Link unten. Fügen Sie dazu den Namen Ihrer Funktion BotList
als Zeichenfolge hinzu und fügen Sie die Funktion dem Code hinzu. Ändern Sie multiplier
zu ändern , was die Reap von jedem Tick multipliziert wird, ändern winning_score
sich ändern , was notwendig Tor gegangen um das Spiel zu beenden, und ändern Sie waittime
die Anzahl der Ticks , um zwischen erntet zu warten.
Hier sind einige Beispiele (und ziemlich dumme) Bots. Das Senden von Bots, die diesen ähnlich sind, ist nicht gestattet. Sie zeigen jedoch, wie der Controller funktioniert.
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
Für Interessierte ist hier der Controller mit den 15 darin eingebauten Einsendungen: Try it Online
ENDGÜLTIGE ERGEBNISSE
WOO SIE SIND ENDLICH HIER! Überprüfen Sie den TIO-Link oben, um festzustellen, mit welchem Code ich die endgültige Rangliste erstellt habe. Die Ergebnisse sind nicht besonders interessant. Über die 1000 Läufe, die ich mit verschiedenen zufälligen Samen gemacht habe, waren die Ergebnisse
1000 wins - Jack
0 wins - everyone else
Glückwunsch an den Kopfgeldgewinner Jack !! (aka @Renzeee)
len(BotList)
?
25
Bots im Spiel gemacht habe. Wartet aber erstmal ein bisschen, bis andere die Bots sehen. Rushabh Mehta , wird es eine Frist / einen Endtermin geben, an dem alle Bots ausgeführt werden und ein Gewinner ermittelt wird?