Easter Egg Hunt
O bot encontra o ovo antes que o coelho encontre o ovo. Bot feliz.
Visão geral
Este é um desafio do tipo rei da colina em homenagem à Páscoa e à tradição de caça aos ovos de Páscoa!
Seu bot tem uma visão de dois espaços em todas as direções, incluindo diagonais, criando um quadrado 5x5 ao seu redor que você pode ver. Está à procura de ovos e quem encontrar mais ovos ganha!
O quadro
O tabuleiro será composto por o
s, que são ovos de Páscoa, #
s, que são paredes, *
s, que são outros jogadores e s, que são espaços vazios.
- Será um quadrado com o comprimento da aresta
(number of entries) * 3
. - Será cercado por muros.
- Dentro das paredes, haverá uma variedade de paredes de linhas retas, colocadas aleatoriamente
#
, que terão um comprimento aleatório entre 2 e 10, inclusive. Haverá(number of entries) * 3
deles. - Os ovos serão colocados aleatoriamente. Haverá um
(number of entries) * 4
deles, e eles serão gerados apenas emquadrados em branco ( ).
- Deve haver pelo menos sete entradas para que o processo de geração da placa funcione corretamente.
Aqui está um JSFiddle que irá gerar um quadro aleatório para você testar. Aqui está um exemplo, com (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Depois que o tabuleiro é gerado, cada jogador é colocado em um quadrado aleatório (espaço vazio).
Entrada
Você receberá seis linhas de entrada. As cinco primeiras linhas são o seu campo de visão (os espaços fora dos limites do quadro serão representados por X
, e o espaço do meio será sempre *
você) e a sexta linha estará vazia (no início).
Resultado
Você produzirá três linhas. Primeiro, a direção que você deseja mover:
1 2 3
8 YOU 4
7 6 5
(9 é um no-op se você não quiser se mover), segundo, um A
ttack, C
ozter ou outro N
(isso será explicado em profundidade em breve), e a linha thrid terá qualquer comprimento de até 1024 Esta será a memória do seu bot. Você pode usá-lo para o que quiser ou deixá-lo em branco. Essa memória será a sexta linha de entrada do seu programa na próxima execução.
Todas as outras linhas de saída são ignoradas e, se houver apenas uma linha, a segunda será assumida em branco.
Movendo
O processo a seguir é usado para determinar para onde você se mudou:
- Se, quando você se move, você acaba em um espaço vazio (
), seu player é colocado nesse espaço.
- Se você parar em uma parede (
#
), sua jogada é ignorada e você perde a sua vez. - Se você acabar em um ovo (
o
) ou em um jogador (*
), essas informações serão armazenadas e serão usadas depois que todos tiverem se mudado.
Depois que todos se mudam, as ambiguidades são resolvidas.
Se houver dois jogadores que desembarcaram no mesmo espaço, ocorre uma luta! É aqui que o A
/ C
/ N
entra para jogar. A
tack supera tudo N
(ataque normal), tato N
supera C
onça (você não pode contrariar nada), e C
onça supera A
ttack (contra-ataque). O jogador que vence esta luta permanece na praça, e o jogador que perde volta para a praça original em que começou. Em caso de empate, os dois jogadores voltam para onde estavam.
Se um jogador perdedor ou empatado voltar para onde estava e houver outro jogador lá, não haverá luta e o outro jogador também voltará ao seu espaço original. Se este espaço tem um outro jogador, que jogador vai voltar, e isso continua até que todos os jogadores estão em diferentes espaços.
Se houver três ou mais jogadores em um espaço, todos eles voltarão às suas posições originais.
Se algum jogador ainda estiver de pé em um ovo ...
- Se o jogador escolher
A
, o ovo é destruído. - Se o jogador escolher
C
, nada acontecerá e o jogador voltará ao seu espaço original. - Se o jogador escolheu
N
, ele pega o ovo! A pontuação do jogador é incrementada em um e o ovo é removido.
línguas
Você pode usar qualquer idioma disponível gratuitamente no Windows, OSX e Linux, para garantir a equidade entre cada participante. Se o código não puder ser executado livremente, mas puder ser compilado ou empacotado em um formato que seja, inclua esse formato na sua resposta também. Idealmente, se você pode compilar seu código em uma linguagem mais comum (por exemplo, CoffeeScript -> JavaScript), faça-o.
Pontuação
Sua pontuação será o número médio de ovos coletados em dez execuções. Uma corrida termina quando todos os ovos são coletados ou quando os (number of entries * 25)
turnos passam. Assegurarei manualmente que é possível alcançar todos os ovos para cada mapa (gerando mapas continuamente até que todos os ovos estejam acessíveis).
Placar
Um placar será adicionado quando todas as seguintes condições forem atendidas:
- Pelo menos sete entradas válidas com uma pontuação positiva ou nula (não reduzida) foram enviadas
- Pelo menos 48 horas se passaram desde a criação deste desafio (UTC 14:23)
As regras não serão alteradas durante o período anterior à competição, exceto para esclarecer onde uma regra não é clara. Depois que o placar for colocado, o programa de testes também será publicado aqui para que você possa testar suas entradas. O código de teste para isso ainda está em andamento, mas é reproduzível e funciona. Aqui está o repositório do GitHub.
9
, ele nunca poderá ser atacado de maneira significativa. Se outro jogador (B) pisar no quadrado desse jogador e vencer, A será movido de volta para o quadrado original (que é o mesmo). Mas agora há um conflito porque A e B estão lá, então B precisa voltar ao seu próprio quadrado. Portanto, o resultado é independente da luta real, B sempre volta ao quadrado inicial e A sempre permanece em pé. Isso me permitiria escrever um dois que poderia ajudar outra submissão, bloqueando um caminho para todos os outros.