sheesh, este é realmente o quarto? Para todos os veteranos, o principal desafio é o mesmo, mas estamos usando Java em vez de uma linguagem personalizada. Aqui estão os três últimos desafios do CodeBot , caso você esteja interessado.
O objetivo do CodeBots é tornar seu bot o mais viral possível . Cada bot carrega uma bandeira e você precisa garantir que sua bandeira esteja em todo lugar .
API
Os bots seguirão um "protocolo" padronizado e os bots progredirão pelas seguintes etapas de forma síncrona:
IPAddress selectMessageRecipient()
permite que um bot escolha para quem ele deseja enviar uma mensagem "amigável".Message sendMessage()
permite que um bot escolha o conteúdo da mensagem que ele enviará.processMessage(IPAddress, Message)
é chamado para cada mensagem que um bot recebe.FunctionType selectFunctionToBlock()
impede que uma função seja substituída na curva atual. Veja o passo 7.IPAddress selectAttackTarget()
permite que um bot escolha quem ele quer DDOS. Um ataque DDOS será bem-sucedido se o bot for direcionado por 3 bots ao mesmo tempo. Se um ataque for bem-sucedido, cada um dos invasores poderá executar as etapas 6 e 7.readData(ReadonlyBot)
permite que um bot leia os dados armazenados no bot vulnerável.FunctionType selectFunctionToReplace()
é o cerne desse desafio . Você tem permissão para selecionar 1 função (das 8 listadas aqui) para copiar do seu bot para o bot dele. Então, sua função será chamada em vez da deles . Se vários bots selecionam a mesma função, uma aleatória será bem-sucedida.String getFlag()
é chamado no final do jogo e deve retornar uma sequência única para o seu envio. Sua função sempre deve retornar a mesma string. A finalização com o maior número de bandeiras no final do jogo vence.
Armazenamento
Você tem três formas de armazenamento, um Catálogo de endereços , um Registro e Variáveis . Essas formas de armazenamento são locais para o bot em que sua função está sendo executada (portanto, se sua função for copiada, o conteúdo de cada um desses objetos será diferente). Todos esses objetos podem ser modificados ou limpos manualmente. Para obter esses objetos, você tem um getter em sua classe (por exemplo getLog()
).
O AddressBook armazena uma lista de IPAddress , cada um com um AddressType , que permite classificar os diferentes tipos de endereços. O Catálogo de Endereços sempre conterá pelo menos 1 endereço (se estiver limpo, será adicionado um aleatório). A limpeza do seu AddressBook para obter vários endereços IP não é permitida.
O Log armazena uma lista de todas as ações executadas, bem como dados sobre a ação. Também inclui um histórico de todos os ataques bem-sucedidos (embora você não saiba quais funções eles substituem)
O objeto Variables permite armazenar variáveis de string anexadas a um nome de string. No início do jogo, Variáveis conterão uma única variável, ID
que contém um ID gerado aleatoriamente, exclusivo para o seu tipo de bot.
Você também tem outras funções de acesso:
int getTurnNumber()
retorna um número inteiro com a curva atualbool functionsMatch(ReadonlyBot, FunctionType)
testes para ver se a função do ReadonlyBot corresponde à suaIPAddress personalAddress()
retorna seu endereço IP
Como implementar
- Você pode obter o código no Github
- Adicione seu bot à
\bots
pasta e, em seguida, adicione uma referência ao seu bot emcontroller\CodeBotFactory.java
- Seu bot deve estender
codebots.bot.CodeBot
oucodebots.bots.DefaultCodeBot
- Você precisa do Java 8 se quiser executar o controlador.
- Você pode executar o código (supondo que você esteja na
/src
pasta) usandojavac codebots\*.java
para compilar e depoisjava codebots.Main
executar. - Você pode não ter quaisquer variáveis de membro não-constantes em sua classe
- Reflexão não é permitida.
- Formas de comunicação entre bots (do mesmo tipo ou de tipos diferentes) fora dos métodos listados acima não são permitidas.
- Bots mudos e / ou suicidas são permitidos, mas todos os bots devem ser funcionalmente diferentes das entradas existentes.
- Se você quiser aleatoriedade no seu bot, use
getRandom()
- Por favor, tente manter seu código eficiente. Passei muito tempo analisando e tornando o controlador rápido.
Pontuações
105.2501 Expelliarmus!
104.5803 Estou ajudando!
104.2746 Quem sou eu?
103.8529 Dumb Bot
103.2028 Substituto
102.7045 Caos
102.4046 Hermit Bot
102.2849 Swarmer
100.5598 O bot aleatório ama você
99.966 Confie na confiança!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 Apenas seu e-mail de vizinhança amigável que fornece robô.
89,4645 null