Le voci sono ora chiuse. Eventuali nuove voci o modifiche non verranno conteggiate nella corsa finale.
Unisciti alla chat!
Sfida
Prova a riempire la tela con più vernice possibile. Fai attenzione ad altri robot che potrebbero dipingere sul tuo duro lavoro!
Nota: in questa descrizione della sfida, dipingere significa cambiare il colore del quadrato sulla griglia e non dipinto significa che il quadrato sulla griglia ha il colore 0 e non è attribuito a nessuno dei robot.
Ingresso
Alla tua funzione verranno dati quattro argomenti: te stesso, la griglia, la posizione di tutti i robot sulla griglia e informazioni sul gioco.
Me stessa
Questo è un array 1D che indica il colore e la posizione sulla griglia: [id, xpos, ypos]
.
L'angolo in alto a sinistra della griglia è la posizione (0, 0)
. La posizione (1,0)
è alla destra di quella e della posizione(0,1)
è sotto
Il tuo ID è un numero intero che è sinonimo del tuo colore (vedi sotto per scoprire come il tuo ID influenza il modo in cui dipingi la griglia). Il tuo ID è unico per il tuo bot.
Griglia
Questo è un array 2D che contiene numeri interi che indicano il colore di ogni cella. Se il numero di una cella della griglia è 0
, significa che la cella non è verniciata. Se il numero della cella della griglia è un numero intero x
, significa che la cella è stata dipinta dal bot con l'ID x
.
Per ottenere il colore della griglia in posizione (x, y)
, utilizzare l'array in questo modo:grid[x][y]
.
Motori di ricerca
Questo è un array che contiene informazioni sulla posizione dei robot. Ogni elemento dell'array di bot è un array che descrive ogni bot e si presenta come:, [id, xpos, ypos]
dove id
è l'ID del bot, xpos
è la posizione x del bot eypos
è la posizione y del bot.
Questo array include la posizione e l'id del tuo bot. I robot eliminati non saranno inclusi in questo array.
Informazioni sul gioco
Questo è un array che contiene informazioni sul gioco corrente e ha il seguente aspetto: [roundNum, maxRounds]
dov'è roundNum
il numero del round corrente (1-indicizzato) ed maxRounds
è il numero di round nel gioco corrente.
Produzione
L'output dovrebbe essere una stringa restituita dalla tua funzione. Questo è il comando di movimento.
Il comando di movimento determina la tua prossima mossa. I comandi disponibili sono:
up
down
left
right
wait
Ogni volta che ti muovi, dipingi il quadrato in cui ti sposti. (vedi sotto per maggiori informazioni)
Dove wait
significa che non ti muovi. (ma dipingi il quadrato su cui rimani)
Se provi a spostarti fuori dalla griglia, il tuo comando verrà ignorato e rimarrai nello stesso posto.
Dipingere la griglia
Ogni volta che ti sposti in un quadrato, lo dipingi, ma ci sono delle regole che determinano quale sarà il colore di quel quadrato.
Se il quadrato non è dipinto (0), allora semplicemente lo dipingi dello stesso colore del tuo ID. Tuttavia, se il quadrato è stato dipinto in precedenza (diverso da zero), il colore risultante del quadrato verrà trovato in base al seguente codice JavaScript:
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
Questa formula è realizzata in modo da consentire a un robot di spostarsi sul proprio colore senza ridipingerlo.
Eliminazione
Se, dopo il round 5, hai uno o meno quadrati dipinti (il numero di quadrati sulla griglia che sono dello stesso colore di te), allora sarai eliminato. Ciò significa che non sarai più in gioco e perderai automaticamente.
Regole
- Il tuo codice deve avere una funzione del tipo
function(myself, grid, bots, gameInfo) {
// Code here
return move;
}
- La griglia sarà un quadrato di lunghezza laterale
- Per evitare il targeting di bot specifici, gli ID dei robot verranno randomizzati.
- Quando due robot occupano lo stesso spazio, il colore di quello spazio verrà reso non dipinto.
- Il movimento è a turni cioè durante un giro, tutti i bot sono forniti con identici
grid
,bots
egameInfo
argomenti
- È possibile creare un massimo di tre robot
- I robot possono lavorare insieme ma non devono comunicare tra loro e non conosceranno gli altri ID. Le vincite verranno assegnate singolarmente anziché come squadra.
- Non è necessario creare un bot intenzionalmente indirizzato a un singolo bot preselezionato. Tuttavia, puoi scegliere come target le tattiche di una classe generale di robot.
- Il tuo bot può archiviare dati
window.localStorage
. Ogni bot deve utilizzare il proprio oggetto dati. Se si rileva che un bot sta leggendo i dati di un altro bot (accidentalmente o di proposito), verrà squalificato fino alla risoluzione del problema. - Se il tuo bot utilizza numeri casuali, utilizza
Math.random()
controllore
Il controller può essere trovato qui:
https://gist.github.com/beta-decay/10f026b15c3babd63c004db1f937eb14
Oppure puoi eseguirlo qui: https://beta-decay.github.io/art_attack
Nota: consiglierei di eseguire qualsiasi test offline (scaricare il controller dall'essenziale) poiché la pagina Web è soggetta a modifiche in qualsiasi momento.
Quando tutti i robot sono stati aggiunti, eseguirò i 10.000 giochi con il controller ridotto senza interfaccia grafica. Puoi eseguirlo qui: https://beta-decay.github.io/art_attack/fast
vincente
Il giocatore che ha riempito la maggior parte della tela vince la partita (una partita è di 2000 round). In caso di pareggio, vincono tutti i giocatori estratti.
Il giocatore che vince il maggior numero di 10.000 partite vince la sfida.
Si stima che i 10.000 giochi verranno eseguiti il prossimo lunedì (27-08-2018 alle 23:00 UTC + 1).
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
formula, sia che un robot abbia fortuna o che dipinga su grandi concorrenti (o venga dipinto). Prendi anche in considerazione i troll / cacciatori che possono distruggere da soli un robot di loro scelta. Ad ogni modo, farà una media dei 10000 giochi.
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
in inglese, per favore?