NOTA : il vincitore di questa competizione è Jack !!!. Non saranno più accettate proposte.
Ecco la chat room per questa sfida del re della collina . Questo è il mio primo, quindi sono aperto ai suggerimenti!
Reaper è un concetto di gioco sviluppato da Art of Problem Solving che coinvolge pazienza e avidità. Dopo aver modificato il gioco per adattarlo a un concorso in stile KOTH (grazie a @NathanMerrill e @dzaima per i tuoi suggerimenti e miglioramenti), ecco la sfida.
Il gioco funziona come segue: abbiamo un valore noto come Reap che si moltiplica per una data costante per ogni tick. Dopo ogni segno di spunta, ogni bot ha la possibilità di "raccogliere", il che significa aggiungere il valore corrente di Reap al proprio punteggio e ridurre Reap fino a 1.
Tuttavia, c'è un numero fisso di tick che un bot deve attendere tra i "reap" e un numero fisso di punti necessari per vincere la partita.
Abbastanza semplice? Ecco i tuoi input:
I / O
Devi scrivere una funzione in Python 3 che accetta 3 input. Il primo è self
, usato per fare riferimento a oggetti di classe (mostrato più avanti). Il secondo è il Reap
valore attuale del Reap che guadagneresti se dovessi "raccogliere". Il terzo è prevReap
, un elenco dei bot raccolti durante il tick precedente.
Altri oggetti a cui puoi accedere nella tua funzione:
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.
È NECESSARIO Non modificare tutti i contenuti di questi oggetti, ad eccezione di self.obj
.
È necessario 1
eseguire l' output per raccogliere e qualsiasi altra cosa (o nulla) per non raccogliere. Nota che se raccogli quando non hai aspettato abbastanza tick, ignorerò il fatto che hai scelto di raccogliere.
Regole
I parametri Userò sono winning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
dove x
è il numero di bot nel KOTH.
- Il gioco termina quando un giocatore (o più) raggiunge il punteggio vincente.
- Quando più robot chiedono di raccogliere in una sola volta, viene data priorità ai robot che hanno atteso più a lungo (in caso di vincoli, i robot che hanno atteso il tempo massimo a tutti possono raccogliere e guadagnare i punti nel Raccogliere)
- Il bot non deve durare più di 100 ms in media su 5 tick.
- Se vuoi importare librerie, chiedi! Proverò ad aggiungere tutte le librerie che posso eseguire sulla mia versione desktop di Python (la matematica è già importata: sentiti libero di usarla)
- Tutte le scappatoie standard per i KoTH, come i robot duplicati, i robot 1-up, ecc., Sono allo stesso modo vietate.
- Tutti i robot che usano qualsiasi tipo di casualità devono usare la
getRandom
funzione che ho fornito.
Puoi trovare il controller nel link TIO qui sotto. Per usarlo, aggiungi il nome della tua funzione BotList
come stringa, quindi aggiungi la funzione al codice. Modifica multiplier
per cambiare ciò che il Reap viene moltiplicato per ogni tick, modifica winning_score
per cambiare il punteggio necessario per terminare il gioco e modifica waittime
per cambiare il numero di tick da attendere tra i giri.
Per comodità, ecco alcuni esempi (e piuttosto sciocchi) di robot. Non sarà consentito inviare robot simili a questi. Tuttavia, dimostrano come funziona il controller.
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
Per chi è interessato, ecco il controller con le 15 proposte integrate: Provalo online
RISULTATI FINALI
QUI SONO FINALMENTE QUI! Controlla il link TIO sopra per vedere quale codice ho usato per generare la classifica finale. I risultati non sono tremendamente interessanti. Nel corso delle 1000 corse che ho fatto con diversi semi casuali, i risultati sono stati
1000 wins - Jack
0 wins - everyone else
Congratulazioni al vincitore della taglia Jack! (aka @Renzeee)
len(BotList)
?
25
robot in gioco. Prima aspetterò un po 'troppo per vedere comunque i robot di altre persone. Rushabh Mehta , ci sarà una scadenza / data finale in cui verranno eseguiti tutti i robot e verrà determinato un vincitore?