sheesh, ¿es realmente el 4to? Para todos los veteranos, el desafío principal es el mismo, pero estamos utilizando Java en lugar de un lenguaje personalizado. Aquí están los últimos tres desafíos de CodeBot , en caso de que esté interesado.
El objetivo de CodeBots es hacer que su bot sea lo más viral posible . Cada bot lleva una bandera, y debes asegurarte de que tu bandera esté en todas partes .
API
Los bots seguirán un "protocolo" estandarizado, y los bots avanzarán sincrónicamente por los siguientes pasos:
IPAddress selectMessageRecipient()
permite que un bot elija a quién quiere enviar un mensaje "amigable".Message sendMessage()
permite que un bot elija el contenido del mensaje que enviará.processMessage(IPAddress, Message)
se llama para cada mensaje que recibe un bot.FunctionType selectFunctionToBlock()
bloquea la sobrescritura de una función para el turno actual. Vea el paso 7.IPAddress selectAttackTarget()
permite que un bot elija a quién quiere DDOS. Un ataque DDOS es exitoso si el bot es atacado por 3 bots al mismo tiempo. Si un ataque tiene éxito, entonces cada uno de los atacantes puede realizar los pasos 6 y 7.readData(ReadonlyBot)
permite que un bot lea datos almacenados en el bot vulnerable.FunctionType selectFunctionToReplace()
Es el quid de este desafío . Puede seleccionar 1 función (de las 8 enumeradas aquí) para copiar desde su bot a su bot. Entonces, se llamará a su función en lugar de la de ellos . Si varios bots seleccionan la misma función, una aleatoria tendrá éxito.String getFlag()
se llama al final del juego y debe devolver una cadena única para su envío. Su función siempre debe devolver la misma cadena. La presentación con más banderas al final del juego gana.
Almacenamiento
Tiene 3 formas de almacenamiento, una libreta de direcciones , un registro y una variable . Estas formas de almacenamiento son locales para el bot en el que se ejecuta su función (por lo tanto, si su función se copia, el contenido de cada uno de estos objetos será diferente). Todos estos objetos se pueden modificar o borrar manualmente. Para obtener estos objetos, tiene un captador en su clase (por ejemplo getLog()
).
La libreta de direcciones almacena una lista de Dirección IP , cada uno con un AddressType , que permite clasificar los diferentes tipos de direcciones. AddressBook siempre contendrá al menos 1 dirección (si se borra, se agregará una aleatoria). No está permitido borrar su libreta de direcciones para obtener múltiples direcciones IP .
El registro almacena una lista de todas las acciones tomadas, así como datos sobre la acción. También incluye un historial de todos los ataques exitosos (aunque no sabes qué funciones sobrescribieron)
El objeto Variables le permite almacenar variables de cadena adjuntas a un nombre de cadena. Al inicio del juego, Variables contendrá una sola variable, ID
que contiene una ID generada aleatoriamente que es única para su tipo de bot.
También tiene otras funciones de acceso:
int getTurnNumber()
devuelve un entero con el turno actualbool functionsMatch(ReadonlyBot, FunctionType)
prueba para ver si la función de ReadonlyBot coincide con la tuyaIPAddress personalAddress()
devuelve su dirección IP
Cómo implementar
- Puedes obtener el código de Github
- Agregue su bot a la
\bots
carpeta y luego agregue una referencia a su bot encontroller\CodeBotFactory.java
- Su bot debe extenderse
codebots.bot.CodeBot
ocodebots.bots.DefaultCodeBot
- Necesita Java 8 si desea ejecutar el controlador.
- Puede ejecutar el código (suponiendo que esté en la
/src
carpeta) usandojavac codebots\*.java
para compilar, luegojava codebots.Main
para ejecutar. - Es posible que no tenga ninguna variable miembro no constante en su clase
- La reflexión no está permitida.
- No se permiten formas de comunicación entre bots (del mismo tipo o de tipos diferentes) fuera de los métodos enumerados anteriormente.
- Los bots tontos y / o suicidas están permitidos, pero todos los bots deberían ser funcionalmente diferentes a las entradas existentes.
- Si quieres aleatoriedad en tu bot, usa
getRandom()
- Intenta mantener tu código eficiente. He pasado mucho tiempo haciendo perfiles y haciendo que el controlador sea rápido.
Puntuaciones
105.2501 Expelliarmus!
104.5803 ¡Estoy ayudando!
104.2746 ¿Quién soy yo?
103.8529 Bot tonto 103.2028
Remplazador
102.7045 Caos
102.4046 Bot ermitaño
102.2849 Enjambre
100.5598 Bot aleatorio te ama
99.966 ¡Confía en la confianza!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Solo su amigable robot de entrega de correo del vecindario.
89.4645 nulo