Eres una gota de baba. Naturalmente, al ser limo, debes rezumar la mayor cantidad de área posible. Pero hay otros 3 limos que quieren hacer exactamente lo mismo. ¿Quién será el limo superior?
Descripción
Todos los limos se reunirán en una arena. Los jueces (es decir, el programa de control) revisarán una lista exhaustiva de todas las combinaciones posibles de 4 limos, las colocarán en las esquinas de una mesa y observarán para ver qué limo se filtra en la mayor parte del área.
Sus limos pueden realizar una de 3 acciones cada turno: desplegarse, saltar o fusionarse. Se proporcionará una descripción más detallada de lo que significan en la sección Salida .
Junta / Arena
La arena será un tablero cuadrado (actualmente 8x8, pero esto puede cambiar en el futuro). Aquí hay un ejemplo de arena de un juego en progreso:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
El limo está representado por los números del 1 al 4 (jugadores del 1 al 4), y el espacio vacío está representado por un punto ( .
). Inicialmente, el tablero comienza como todo el espacio vacío, excepto por una sola unidad del limo del jugador 1 en la esquina superior izquierda, el jugador 2 en la esquina superior derecha, el jugador 3 en la esquina inferior izquierda y el jugador 4 en la esquina inferior derecha.
Las coordenadas están representadas por un índice de fila y columna basado en 0, para facilitar la lectura en el código. Por ejemplo, las coordenadas (3, 6) representan el séptimo cuadrado en la cuarta fila (en el ejemplo anterior, a 4
). (Esto facilita el acceso a los cuadrados:. board[coords.x][coords.y]
) Aquí hay una ilustración visual:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Entrada
La entrada de su programa será el jugador que sea (1, 2, 3 o 4), una coma ( ,
), luego el contenido del tablero / arena (con nuevas líneas reemplazadas por comas). Por ejemplo, si fueras el jugador 3 en el escenario anterior, tu entrada sería:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Salida
Su programa debe generar 4 enteros. Los dos primeros son el índice de fila y columna, respectivamente, del limo que desea mover, y los siguientes dos son el índice de fila y columna de dónde desea moverlos.
Hay tres opciones que tiene en cada turno: desplegarse, saltar o fusionarse.
Untado
Para extenderse, las coordenadas del objetivo deben estar exactamente a un cuadrado del limo que se está moviendo, y el cuadrado en las coordenadas del objetivo debe ser un espacio vacío. Al extenderse, se crea un nuevo limo en las coordenadas del objetivo y no se elimina el antiguo limo . Después de que se crea el nuevo limo, todos los limos enemigos en los 8 cuadrados alrededor de este nuevo limo se convierten en el jugador que se movió.
Por ejemplo, con el tablero en la Fig. 1, si el jugador 1 fuera a salir
0 1 1 2
, el resultado sería el tablero en la Fig. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Saltar
Para saltar, las coordenadas del objetivo deben estar exactamente a dos cuadrados del limo que se está moviendo, y el cuadrado en las coordenadas del objetivo debe ser un espacio vacío. Al saltar, se crea un nuevo limo en las coordenadas del objetivo y se elimina el antiguo limo. Después de que se crea el nuevo limo, todos los limos enemigos en los 8 cuadrados alrededor de este nuevo limo se convierten en el jugador que se movió.
Por ejemplo, con el tablero en la Fig. 1, si el jugador 1 fuera a salir
0 1 2 3
, el resultado sería el tablero en la Fig. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Unir
Para fusionarse, las coordenadas del objetivo deben estar exactamente a un cuadrado del limo que se está moviendo, y el cuadrado en las coordenadas del objetivo debe ser el mismo limo del jugador. Al fusionar, se elimina el limo viejo. Luego, todos los espacios vacíos en los 8 cuadrados alrededor del limo objetivo se convierten al jugador que se movió (sin incluir el antiguo limo que se está moviendo).
Por ejemplo, con el tablero en la Fig. 1, si el jugador 1 fuera a salir
0 1 1 2
, el resultado sería el tablero en la Fig. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
También puede pasar, simplemente enviando coordenadas inválidas (ej. 0 0 0 0
).
Reglas y restricciones
Las reglas adicionales son:
- Puede leer y escribir archivos dentro de su propia carpeta para conservar los datos (los envíos se almacenarán
players/YourBotName/yourBotName.language
), pero no puede modificar ni acceder a nada fuera de ella. Se prohíbe el acceso a internet. - Es posible que su envío no esté codificado específicamente para ayudar o dañar otro envío. (Es posible que tenga varias presentaciones, pero no deben interactuar específicamente entre sí de ninguna manera).
- Su envío no debe demorar más de 0.1 segundos por turno. Si su envío demora 0.105 segundos ocasionalmente, está bien, pero es posible que no tarde mucho más que este límite de tiempo. (Esto es principalmente un control de cordura para evitar que las pruebas tarden demasiado tiempo).
- Su envío no debe ser un duplicado exacto (es decir, usar exactamente la misma lógica) de otro, incluso si está en un idioma diferente.
- Su presentación debe ser una presentación seria. Esto se basa en la opinión, pero si su presentación claramente no intenta resolver el desafío (por ejemplo, si pasa cada turno), será descalificado.
Si su envío infringe alguna de estas reglas o no sigue la especificación, será descalificado, eliminado playerlist.txt
y el juego se reiniciará desde el principio. Si su presentación es descalificada, dejaré un comentario en su publicación explicando por qué. De lo contrario, su envío se agregará a la tabla de clasificación. (Si no ve su envío en la tabla de clasificación, no haga ningún comentario explicativo sobre su publicación y publique su envío antes del tiempo de "Última actualización" a continuación, ¡dígame! Es posible que lo haya pasado por alto inadvertidamente).
En su entrada, por favor incluya:
- Un nombre.
- Un comando shell para ejecutar el programa (por ejemplo,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, etc.).- Tenga en cuenta que la entrada (su jugador y mapa) se agregará a esto como un argumento de línea de comando.
- Los programas se probarán en Ubuntu 14.04, así que asegúrese de que su código se pueda ejecutar (libremente) en él.
- Un número de versión, si su código funciona de manera diferente en diferentes versiones de su idioma.
- El código de tu bot.
- Instrucciones sobre cómo compilar el código, si es necesario.
Código / prueba del controlador, ejemplo bot
El código del controlador está escrito en C ++ y se puede encontrar en Github . Allí encontrará más instrucciones sobre cómo ejecutar y probar su código.
simplebot.rb
, un bot muy simple que propaga o salta un limo aleatorio a una ubicación aleatoria cada turno, también se publica en Github .
Puntuación y tabla de clasificación
Cuando se llenan todas las casillas del tablero, el juego termina y se calculan las puntuaciones. La puntuación final de un jugador es la cantidad de cuadrados que contienen su baba al final del juego. Si han pasado 2000 turnos (500 para cada jugador) y el juego aún no ha terminado, el juego terminará de todos modos y los puntajes se informarán como si el juego hubiera terminado.
Al final del torneo, los puntajes de todos los juegos se promediarán para calcular el puntaje final de cada jugador, que se publicará en la tabla de clasificación. No hay fecha límite de presentación; Continuaré actualizando la tabla de clasificación periódicamente a medida que lleguen nuevos envíos.
Se requieren 4 presentaciones hasta que aparezca una tabla de clasificación real.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Última actualización: 22 de julio 10:27 p.m. (UTC).