Búsqueda de huevos de Pascua
Bot encuentra huevo antes de que conejito encuentre huevo. Bot feliz.
Visión general
¡Este es un desafío del rey de la colina en honor a la Pascua y la tradición de la caza del huevo de Pascua!
Tu bot tiene una visión de dos espacios en cada dirección, incluidas las diagonales, creando un cuadrado de 5x5 a tu alrededor que puedes ver. ¡Está buscando huevos, y el que encuentre más huevos gana!
El tablero
El tablero consistirá en o
s, que son huevos de Pascua, #
s, que son paredes, *
s, que son otros jugadores, y s, que son espacios vacíos.
- Será un cuadrado con longitud de borde
(number of entries) * 3
. - Estará rodeado de muros.
- Dentro de las paredes habrá una variedad de paredes de líneas rectas colocadas al azar
#
, que tendrán una longitud aleatoria entre 2 y 10 inclusive. Habrá(number of entries) * 3
de ellos. - Los huevos se colocarán al azar. Habrá
(number of entries) * 4
de ellos, y solo se generarán encuadrados en blanco ( ).
- Debe haber al menos 7 entradas para que el proceso de generación de la placa funcione correctamente.
Aquí hay un JSFiddle que generará un tablero aleatorio para que lo pruebe. Aquí hay un ejemplo, con (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#
# #
#####################
Después de que se genera el tablero, cada jugador se coloca en un cuadrado aleatorio (espacio vacío).
Entrada
Tomarás seis líneas de entrada. Las primeras cinco líneas son su campo de visión (los espacios fuera de los límites del tablero estarán representados por X
, y el espacio intermedio siempre será *
usted), y la sexta línea estará vacía (al principio).
Salida
Saldrá tres líneas. Primero, la dirección en la que quieres moverte:
1 2 3
8 YOU 4
7 6 5
(9 es un no-op si no quiere moverse), segundo, uno de A
tack, C
onza u otro N
(esto se explicará en profundidad pronto), y la tercera línea será cualquier cadena de longitud hasta 1024 Esta será la memoria de tu bot. Puede usarlo para lo que desee, o puede dejarlo en blanco. Esta memoria será la sexta línea de entrada a su programa en la próxima ejecución.
Se ignoran todas las líneas de salida adicionales, y si solo hay una línea, se supone que la segunda está en blanco.
Moviente
El siguiente proceso se utiliza para determinar dónde se mudó:
- Si, cuando te mueves, terminas en un espacio vacío (
), tu jugador se coloca en ese espacio.
- Si terminas en una pared (
#
), tu movimiento es ignorado y pierdes tu turno. - Si terminas en un huevo (
o
) o en un jugador (*
), esta información se almacena y se usará después de que todos se hayan movido.
Después de que todos se han movido, se resuelven las ambigüedades.
Si hay dos jugadores que han aterrizado en el mismo espacio, ¡se produce una pelea! Aquí es donde entra A
/ C
/ N
para jugar. A
ttack supera a otro N
(ataque normal), otro N
supera a un C
kilo (no se puede contrarrestar nada) y C
onza supera a un A
segundo (contraataque). El jugador que gana esta pelea se queda en su casilla, y el jugador que pierde vuelve a la casilla original en la que comenzó. En caso de empate, ambos jugadores vuelven a donde estaban.
Si un jugador perdido o empatado vuelve a donde estaba y hay otro jugador allí, no hay pelea y el otro jugador también volverá a su espacio original. Si este espacio tiene otro jugador, ese jugador regresa, y esto continúa hasta que todos los jugadores estén en espacios diferentes.
Si hay tres o más jugadores en un espacio, todos vuelven a sus posiciones originales.
Si algún jugador todavía está parado sobre un huevo ...
- Si el jugador elige
A
, el huevo se destruye. - Si el jugador elige
C
, no pasa nada y el jugador vuelve a su espacio original. - Si el jugador elige
N
, ¡el jugador recoge el huevo! La puntuación del jugador se incrementa en uno y el huevo se elimina.
Idiomas
Puede usar cualquier idioma que esté disponible gratuitamente en Windows, OSX y Linux, para garantizar la equidad entre cada concursante. Si el código no se puede ejecutar libremente pero puede compilarse o empaquetarse en un formato que sí lo es, incluya este formato en su respuesta también. Idealmente, si puede compilar su código en un lenguaje más común (es decir, CoffeeScript -> JavaScript), hágalo.
Puntuación
Su puntaje será el número promedio de huevos que recolecta de cada diez carreras. Una carrera termina cuando se recogen todos los huevos o cuando (number of entries * 25)
han pasado los turnos. Me aseguraré manualmente de que sea posible alcanzar todos los huevos para cada mapa (generando mapas continuamente hasta que todos los huevos sean accesibles).
Marcador
Se agregará un marcador cuando se cumplan todas las siguientes condiciones:
- Se han enviado al menos siete entradas válidas con un puntaje positivo o cero (sin voto negativo)
- Han transcurrido al menos 48 horas desde la creación de este desafío (UTC 14:23)
Las reglas no cambiarán durante este período previo al concurso, excepto para agregar aclaraciones donde una regla no estaba clara. Una vez que se coloca el marcador, el programa de prueba también se publicará aquí para que pueda probar sus entradas. El código de prueba para esto todavía está en progreso, pero es jugable y funciona. Aquí está el repositorio de GitHub.
9
, nunca puede ser atacado de manera significativa. Si otro jugador (B) sube a la casilla de ese jugador y gana, A volverá a su casilla original (que es la misma). Pero ahora hay un choque porque A y B están allí, por lo que B tiene que volver a su propio cuadrado. Por lo tanto, el resultado es independiente de la pelea real, B siempre regresa al cuadrado inicial y A siempre se queda. Eso me permitiría escribir un tanto que podría ayudar a otra presentación al bloquear un camino para todos los demás.