NOTE : Le gagnant de ce concours est Jack !!!. Aucune autre soumission ne sera acceptée.
Voici le salon de discussion pour ce défi du roi de la colline . Ceci est mon premier, donc je suis ouvert aux suggestions!
Reaper est un concept de jeu développé par l'Art de la résolution de problèmes qui implique de la patience et de la cupidité. Après avoir modifié le jeu pour l'adapter à un concours de style KOTH (Merci à @NathanMerrill et @dzaima pour vos suggestions et améliorations), voici le défi.
Le jeu fonctionne comme suit: nous avons une valeur connue sous le nom de Reap qui se multiplie par une constante donnée à chaque tick. Après chaque tick, chaque bot a l'option de "récolter", ce qui signifie ajouter la valeur actuelle de Reap à son score et réduire Reap à 1.
Cependant, il y a un nombre fixe de ticks qu'un bot doit attendre entre les "moissonnages", et un nombre fixe de points nécessaires pour gagner la partie.
Assez simple? Voici vos entrées:
E / S
Vous devez écrire une fonction en Python 3 qui prend 3 entrées. Le premier est self
utilisé pour référencer les objets de classe (illustré plus loin). Le second est le Reap
, la valeur actuelle du Reap que vous gagneriez si vous "récoltiez". Le troisième est prevReap
une liste des bots récoltés lors du tick précédent.
Autres objets auxquels vous pouvez accéder dans votre fonction:
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.
Vous NE DEVEZ pas modifier le contenu de ces objets, à l'exception de self.obj
.
Vous devez sortir 1
pour récolter, et toute autre chose (ou rien) pour ne pas récolter. Notez que si vous récoltez alors que vous n'avez pas attendu suffisamment de ticks, j'ignorerai le fait que vous avez choisi de récolter.
Règles
Les paramètres que je vais utiliser sont winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
où x
est le nombre de bots dans le KOTH.
- Le jeu se termine lorsqu'un joueur (ou plusieurs) atteint le score gagnant.
- Lorsque plusieurs robots demandent à récolter à la fois, la priorité est donnée aux robots qui ont attendu plus longtemps (en cas d'égalité, les robots qui ont attendu le temps maximum sont tous autorisés à récolter et à gagner des points dans la récolte)
- Votre bot ne doit pas prendre plus de 100 ms en moyenne sur 5 ticks.
- Si vous souhaitez importer des bibliothèques, demandez! Je vais essayer d'ajouter toutes les bibliothèques que je peux exécuter sur ma version de bureau de Python (les mathématiques sont déjà importées: n'hésitez pas à l'utiliser)
- Toutes les failles standard pour les KoTH, telles que les robots en double, les robots à une place, etc., sont également interdites.
- Tous les bots qui utilisent n'importe quel type de hasard doivent utiliser la
getRandom
fonction que j'ai fournie.
Vous pouvez trouver le contrôleur dans le lien TIO ci-dessous. Pour l'utiliser, ajoutez le nom de votre fonction en BotList
tant que chaîne, puis ajoutez la fonction au code. Modifier multiplier
pour changer ce que la moisson est multipliée par chaque tick, modifier winning_score
pour changer le score nécessaire pour terminer le jeu et modifierwaittime
pour changer le nombre de ticks à attendre entre les moissonnages.
Pour votre commodité, voici quelques exemples de robots (et plutôt idiots). La soumission de robots similaires à ceux-ci ne sera pas autorisée. Cependant, ils montrent comment fonctionne le contrôleur.
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
Pour les personnes intéressées, voici le contrôleur avec les 15 soumissions intégrées: Essayez-le en ligne
RÉSULTATS FINAUX
WOO ILS SONT ENFIN ICI! Vérifiez le lien TIO ci-dessus pour voir quel code j'ai utilisé pour générer le classement final. Les résultats ne sont pas terriblement intéressants. Au cours des 1000 essais que j'ai effectués avec différentes graines aléatoires, les résultats ont été
1000 wins - Jack
0 wins - everyone else
Félicitations au gagnant du Bounty Jack !! (alias @Renzeee)
len(BotList)
?
25
bots en jeu. Attendra d'abord un peu trop voir les robots des autres cependant. Rushabh Mehta , y aura-t-il une date limite / date finale lorsque tous les bots seront exécutés et qu'un gagnant sera déterminé?