As inscrições estão encerradas. Quaisquer novas entradas ou edições não serão contadas na execução final.
Participe do chat!
Desafio
Tente preencher a tela com o máximo de tinta possível. Tenha cuidado com outros bots que podem afetar seu trabalho duro!
Nota: Nesta descrição do desafio, pintar significa alterar a cor do quadrado na grade e não pintado significa que o quadrado na grade tem a cor 0 e não é atribuído a nenhum dos bots.
Entrada
Sua função receberá quatro argumentos: você, a grade, a posição de todos os bots na grade e as informações do jogo.
Eu mesmo
Esta é uma matriz 1D que denota a sua cor e posição no grid: [id, xpos, ypos]
.
O canto superior esquerdo da grade é a posição (0, 0)
. A posição (1,0)
está à direita e a posição (0,1)
está abaixo
Seu ID é um número inteiro que é sinônimo de sua cor (veja abaixo para descobrir como seu ID afeta como você pinta a grade). Seu ID é exclusivo para o seu bot.
Grade
Esta é uma matriz 2D que contém números inteiros que informam qual a cor de cada célula. Se o número de uma célula da grade for 0
, isso significa que a célula está sem pintura. Se o número de células da grade for um número inteiro x
, isso significa que a célula foi pintada pelo bot com o ID x
.
Para obter a cor da grelha na posição (x, y)
, use a matriz assim: grid[x][y]
.
Bots
Esta é uma matriz que contém informações sobre a posição dos bots. Cada elemento da matriz de bots é uma matriz que descreve cada bot e se parece com:, [id, xpos, ypos]
onde id
é o ID do bot, xpos
é a posição x do bot e ypos
a posição y do bot.
Essa matriz inclui a posição e o ID do seu bot. Os bots eliminados não serão incluídos nessa matriz.
Informações sobre o jogo
Essa é uma matriz que contém informações sobre o jogo atual e se parece com: [roundNum, maxRounds]
onde roundNum
é o número da rodada atual (indexada a 1) e maxRounds
o número de rodadas no jogo atual.
Resultado
A saída deve ser uma sequência retornada por sua função. Este é o comando de movimento.
O comando de movimento determina seu próximo movimento. Os comandos disponíveis são:
up
down
left
right
wait
Sempre que você se move, pinta o quadrado para o qual se move. (veja abaixo para mais informações)
Onde wait
significa que você não se move. (mas você pinta o quadrado em que fica)
Se você tentar sair da grade, seu comando será ignorado e você permanecerá no mesmo lugar.
Pintando a grade
Sempre que você se move para um quadrado, pinta-o, mas existem regras que determinam qual será a cor desse quadrado.
Se o quadrado estiver sem pintura (0), basta pintá-lo da mesma cor que seu próprio ID. No entanto, se o quadrado tiver sido pintado anteriormente (diferente de zero), a cor resultante do quadrado será encontrada de acordo com o seguinte código JavaScript:
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
Essa fórmula é feita para permitir que um bot se mova sobre sua própria cor sem repintá-la.
Eliminação
Se, após a rodada 5, você tiver um ou menos quadrados pintados (o número de quadrados na grade que são da mesma cor que você), você será eliminado. Isso significa que você não estará mais no jogo e perderá automaticamente.
Regras
- Seu código deve ter uma função do tipo
function(myself, grid, bots, gameInfo) {
// Code here
return move;
}
- A grade terá um quadrado de comprimento lateral
- Para impedir que bots específicos sejam segmentados, os IDs dos bots serão randomizados.
- Quando dois bots ocupam o mesmo espaço, a cor desse espaço fica sem pintura.
- O movimento é baseado em turnos, ou seja, durante uma rodada, todos os bots são fornecidos com argumentos e argumentos idênticos
grid
.bots
gameInfo
- Você pode criar no máximo três bots
- Os robôs podem trabalhar juntos, mas não devem se comunicar e não saberão os IDs uns dos outros. As vitórias serão concedidas individualmente e não como uma equipe.
- Você não deve criar um bot que atinja intencionalmente um único bot pré-escolhido. Você pode, no entanto, ter como alvo as táticas de uma classe geral de bots.
- Seu bot pode armazenar dados no
window.localStorage
. Cada bot deve usar seu próprio objeto de dados. Se um bot estiver lendo os dados de outro bot (acidentalmente ou de propósito), ele será desqualificado até que o problema seja resolvido. - Se o seu bot usa números aleatórios, use
Math.random()
Controlador
O controlador pode ser encontrado aqui:
https://gist.github.com/beta-decay/10f026b15c3babd63c004db1f937eb14
Ou você pode executá-lo aqui: https://beta-decay.github.io/art_attack
Nota: Eu aconselho que você faça qualquer teste offline (faça o download do controlador a partir da essência), pois a página da Web está sujeita a alterações a qualquer momento.
Quando todos os bots forem adicionados, executarei os 10.000 jogos com o controlador despojado, sem interface gráfica. Você pode executá-lo aqui: https://beta-decay.github.io/art_attack/fast
Ganhando
O jogador que mais preenche a tela ganha o jogo (um jogo é de 2000 rodadas). Em caso de empate, todos os jogadores sorteados vencem.
O jogador que vencer o máximo de 10.000 jogos vence o desafio.
Estima-se que os 10.000 jogos sejam executados na próxima segunda-feira (27/08/2018 às 23:00 UTC + 1).
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
fórmula, se um bot tem ou não sorte e pode pintar sobre grandes concorrentes (ou pintar). Leve também em consideração os trolls / caçadores que podem destruir por si só um bot de sua escolha. De qualquer maneira, a média será dos 10000 jogos.
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
para o inglês, por favor?