Introducción
En este juego, los jugadores usan sus ejércitos para luchar contra los ejércitos de otros jugadores, capturar territorios y convertirse en el último hombre en pie. Cada turno, los jugadores reciben un número base de ejércitos para usar a su disposición. Sin embargo, al capturar territorios en ciertas regiones, los jugadores pueden aumentar este número para darles una ventaja potencial más adelante en el juego. (Esto es esencialmente lo mismo que Warlight ).
Todos los bots deben estar escritos en Java, C o C ++ (incluiría otros lenguajes pero no tengo el software o la experiencia para ellos). No es necesario que su envío extienda una clase, y puede crear funciones, clases, interfaces o cualquier otra cosa que sea necesaria, y usar cualquier paquete o clase en las API estándar . Si planea crear una clase o interfaz, considere usar una clase interna o interfaz interna.
No intente alterar programáticamente el controlador u otras presentaciones en esta competencia.
Como se Juega
Visión general
Una matriz bidimensional de 10x10 simulará el tablero, cada elemento / celda representa un "territorio". Habrá 20 rondas y hasta 1000 vueltas por ronda. Cada turno, los jugadores desplegarán primero los ejércitos que tienen en cualquiera de los territorios que poseen, y luego se les dará la oportunidad de transportar sus ejércitos a territorios cercanos en un intento de capturar los territorios de sus oponentes atacando a los ejércitos en ellos. Los jugadores deben desplegar todos sus ejércitos, pero no tienen que moverlos si lo desean.
Atacar / transferir ejércitos
Si el jugador lo desea, puede enviar ejércitos desde un territorio a cualquiera de los ocho adyacentes. El tablero "se envuelve", es decir, si el territorio de un jugador está en un lado, los ejércitos pueden transferirse a un territorio adyacente en el otro lado. Cuando se mueven ejércitos de un territorio, aún debe quedar al menos un ejército en ese territorio. Por ejemplo, si un territorio contiene cinco ejércitos, no se pueden mover más de cuatro a un territorio diferente; si un territorio contiene uno, ese ejército no puede moverse.
Si un jugador envía nejércitos de un territorio a otro que posee, ese territorio recibirá nejércitos.
Digamos que un jugador envía nejércitos desde su territorio a un territorio contrario con oejércitos en él. odisminuirá en n * .6redondeado al entero más cercano; sin embargo, al mismo tiempo, ndisminuirá en o * .7redondeado al entero más cercano. Se aplicarán las siguientes reglas que tratan sobre si el territorio contrario ha sido capturado o no:
- Si
ollega a cero Ynes mayor que 0, el jugador se hará cargo del territorio, que tendránejércitos. - Si ambos
ny seoconvierten en cero,ose establecerá automáticamente en 1 y el territorio no se capturará. - Si
opermanece mayor que 0, el número de ejércitos en el territorio del jugador aumentará enny el territorio contrario no será capturado.
Bonos
Se elegirá un grupo de territorios para representar una bonificación; Si un jugador posee todos los territorios que forman parte del grupo, ese jugador recibirá una cantidad adicional de ejércitos por turno.
Los bonos tienen números de identificación para denotar diferentes y valores que representan la cantidad adicional de ejércitos que un jugador puede recibir. Cada ronda, el valor de un bono será un número aleatorio entre 5 y 10, inclusive, y habrá diez bonos disponibles en el campo, cada uno con diez territorios incluidos en el bono.
Por ejemplo, si un jugador que recibe 5 ejércitos por turno posee todos los territorios que conforman un bono con un valor de 8, el jugador recibirá 13 ejércitos el próximo turno y los turnos posteriores. Sin embargo, si el jugador pierde uno o más de los territorios que componen la bonificación, recibirá solo 5 ejércitos por turno.
De entrada y salida
Su programa debe recibir información a través de argumentos de línea de comandos, que tendrán el siguiente formato:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
idyarmiesson ambos números enteros.ides su identificación yarmieses la cantidad de ejércitos que necesita desplegar en sus territorios. Debes desplegar todos los ejércitos que te han dado, ni más ni menos.territorieses una serie de cadenas que representan los territorios que posee y los territorios que no posee que son adyacentes al suyo. Las cadenas están en este formato:[row],[col],[bonus id],[player id],[armies]rowecolindique la fila y la columna del tablero donde está el territorio,bonus ides la identificación del bono del que forma parte este territorio,player ides la identificación del jugador que posee el territorio yarmieses el número de ejércitos contenidos en el territorio. Estos son todos los números.bonuseses una serie de cadenas que representan los bonos en el tablero que puede aprovechar. Las cadenas están en este formato:[id],[armies],[territories left]ides la identificación de la bonificación,armieses la cantidad de ejércitos adicionales que puede recibir al poseer todos los territorios en esta bonificación, yterritories leftes la cantidad de territorios en la bonificación que necesita capturar para recibir los ejércitos adicionales.
Tenga en cuenta que aparecerá un quinto argumento, una "X", si es la primera vuelta de una ronda y puede usarse por razones de conveniencia.
Un ejemplo de entrada en el primer turno:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Su programa debe generar dos cadenas separadas por una nueva línea, la primera de las cuales enumera las filas y columnas de los territorios a los que desea agregar ejércitos y la cantidad de ejércitos que desea agregar, y la segunda de las cuales enumera las filas y columnas de los territorios a los que desea enviar ejércitos y la cantidad de ejércitos que desea enviar. La salida puede contener espacios finales.
Para especificar un territorio al que desea agregar ejércitos, su salida debe seguir este formato:
[row],[col],[armies]
rowy colson la fila y la columna del tablero donde está el territorio al que desea agregar ejércitos, y armieses el número de ejércitos que desea agregar al territorio.
Para especificar a qué territorios desea enviar ejércitos, su salida debe seguir este formato:
[srow],[scol],[drow],[dcol],[armies]
srowy scolson la fila y la columna del tablero desde donde se encuentra el territorio desde el cual quieres transportar ejércitos, drowy dcolson la fila y la columna del tablero hacia donde está el territorio al que quieres enviar ejércitos, y armieses el número de ejércitos que deseas enviar . Tenga en cuenta que si no desea mover ningún ejército, su programa debería imprimir un espacio.
Una salida de muestra puede ser esta:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
En este caso, el jugador despliega cinco ejércitos en el territorio a 0,0 y mueve tres ejércitos de 0,0 a 0,1; tres de 0,0 a 1,0; y tres de 0,0 a 1,1.
Rondas y vueltas
Al comienzo de cada ronda, todos los jugadores recibirán un territorio ubicado en un lugar aleatorio en el tablero (es posible que dos o más jugadores comiencen uno al lado del otro). Los territorios que conforman una bonificación también pueden cambiar.
En el primer turno, cada jugador tendrá un territorio que contiene cinco ejércitos, y recibirán cinco ejércitos que pueden usar (este es el mínimo que pueden recibir). Todos los demás territorios serán propiedad de NPC que no ataquen; cada uno de estos contiene dos ejércitos y tiene una identificación de -1.
Cada turno se ejecutará su programa y se recopilarán ambas piezas de salida. El controlador aplicará la primera pieza de salida, agregando ejércitos a los territorios, inmediatamente; sin embargo, el controlador esperará hasta que todos los jugadores hayan dado su segunda salida, sus comandos de ataque / transferencia. Una vez que esto se haya completado, los comandos se barajarán aleatoriamente y luego se ejecutarán. Su programa debe proporcionar salida y terminar en un segundo o menos para poder participar en el turno.
Puntuación y victorias
Para cualquier ronda, si queda un jugador, ese jugador ganará 100 puntos. De lo contrario, si pasan 1000 turnos y todavía hay varios jugadores, los 100 puntos se dividirán en partes iguales entre los jugadores restantes (es decir, 3 jugadores restantes rinden 33 puntos cada uno). Ganará el jugador que tenga más puntos al final de las 20 rondas.
Envíos
Su publicación debe incluir un nombre para el bot, el idioma en el que está escrito, una breve descripción y el código utilizado para ejecutarlo. Un bot de muestra se publicará aquí como ejemplo y se utilizará en el concurso. Puede enviar tantos como desee.
Otro
Su programa puede crear, escribir y leer desde un archivo siempre que el nombre del archivo sea el mismo que utilizó para su envío. Estos archivos se eliminarán antes del comienzo de un torneo pero no entre rondas.
Su turno se saltará si:
- eres eliminado (no tienes territorios);
- su programa no imprime nada;
- su programa no termina en un segundo;
- despliega muy pocos ejércitos en sus territorios (desplegar ejércitos en territorios que no son de su propiedad contará para esto) o demasiados ejércitos; o
- su salida hace que el controlador arroje una excepción.
Su comando de ataque / transferencia no se ejecutará si:
- su programa no da salida correcta;
- eliges un territorio para mover ejércitos que no sea el tuyo;
- mueves cero o un número negativo de ejércitos desde tu territorio;
- mueves demasiados ejércitos de tu territorio; o
- eliges un territorio para enviar ejércitos que no sea adyacente al territorio del que elegiste mover ejércitos.
Puede encontrar el controlador y un bot de muestra aquí . El bot participará en el juego, pero probablemente no ganará ninguna ronda (a menos que sea realmente afortunado).
Resultados
Al ejecutar el controlador después de presionar una corrección de errores, WeSwarm sigue siendo una fuerza a tener en cuenta. Se necesitará un bot con una gran estrategia para tener una oportunidad contra él.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
¡Darse cuenta!
Se ha solucionado un error descubierto por Zsw que causaba que los territorios que desplegaban sus ejércitos después de que otros tuvieran una ventaja potencial en el juego. Se ha enviado una edición al controlador, así que utilice la versión existente que se encuentra utilizando el enlace de arriba.
fuente

Respuestas:
Castler - Java 8
Él solo quiere hacer un castillo cuadrado ... y si se lo deja solo, lo hará. Aunque se aburre con un pequeño castillo, lo hace más y más grande. Esto inevitablemente significará conflicto con otros jugadores y, por lo tanto, se producirá la batalla. Sin embargo, nunca olvida su forma más deseada ... el cuadrado.
Haga clic en la imagen para un gif animado (15 meg) de una simulación completa de 20x 1000 vueltas. Castler anotó 1700 y los otros jugadores anotaron 100 cada uno.
fuente
Ermitaño - Java
Simplemente sigue sumando sus ejércitos a la misma ciudad. No creo que pueda ser derribado sin obtener ejércitos adicionales.
fuente
WeSwarm - C ++ 11 [v2.2]
Actualizado a v2.2 a partir del 25 de agosto de 2015.
v2.2 - ajustado debido a un cambio en la forma en que el controlador informa a los ejércitos.
v2.1 - TNT estaba teniendo problemas para compilar mi código, así que dejé de usarlo
stoi.v2.0: un refactorizador de código junto con algunas correcciones de errores.
Bienvenido al enjambre. Nuestra fuerza está en los números. Nuestra voluntad eterna es recolectar todas sus bonificaciones para maximizar nuestros engendros. No se interponga en nuestro camino, para que no se sienta abrumado. No intentes derrotarnos, por cada uno que mates, tres más ocuparán su lugar. ¡Puede obligarnos a hacer sacrificios, pero nunca nos obligará a rendirnos!
GIF animado
Archivado:
v2.1: https://drive.google.com/uc?export=download&id=0B-BtKdd4FDDEU3lkNzVoTUpRTG8
v1.0: https://drive.google.com/uc?export=download&id=0B-BtKdd4FDDEVzZUUlFydXo2T00
fuente
stoino haberse resuelto a pesar de tener 11 C ++. Ha habido constantes problemas con la resolución de lo que todavía tengo que encontrar la manera de hacer, así que podría proporcionar una solución alternativa que no utilizastoi?LandGrab - Java
Cuanto más tierra mejor. Apunta a territorios exclusivamente libres si los hay, luego, con los ejércitos sobrantes, comienza a acumularse y elimina al enemigo una ficha a la vez.
fuente
Random Halver - Java 8
Un bot muy simple que simplemente mueve la mitad de sus ejércitos en cada territorio a un territorio vecino aleatorio. No importa si el vecino es amigo o enemigo ...
Si bien no puede competir con Castler, lo hace sorprendentemente bien contra el Jugador y otros bots.
fuente