A internet falhou. Os ataques DDoS agora são galopantes e generalizados. Cabe a você assumir o controle e reparar a Internet.
Cada bot controlará 20 nós nesta rede. Cada nó é ativo ou seguro , possui um proprietário e uma força, que começa em 2. Todo nó ativo é conectado a todos os outros nós ativos.
A cada turno, você receberá uma lista de todos os nós ativos com suas forças. Para cada um dos nós ativos que você possui, você:
- Designe um nó ativo que você deseja transferir todo o seu força ou
- Economize e aumente sua força
Então, o seguinte acontece em ordem :
- Um nó que optar por salvar sua força aumentará sua força em 1.
- Todos os nós que optarem por transferir sua força transferirão simultaneamente toda a sua força para o novo nó.
- Se um nó foi transferido força de um nó inimigo, um ataque ocorrerá. Se um dono inimigo transferir coletivamente mais força do que o proprietário original (e todos os outros atacantes), esse inimigo se tornará o novo proprietário. A força desse nó se torna a força do atacante. Se houver um empate por força, o proprietário será escolhido aleatoriamente.
- Todos os nós deixados sem força serão considerados seguros e atribuem 1 ponto ao proprietário.
Após 100 jogos de 100 turnos, o proprietário com os nós mais seguros em todos os jogos vence. EDIT: Eu mudei de 2000 para 100 voltas, pois as últimas 1900 foram inúteis
IO
Você receberá a lista de nós ativos (via args da linha de comando), como a seguir:
F20 F4 E7 E2 E20 F2
F
designa que o nó é um nó amigável e E
designa que o nó é um inimigo.
Para cada um dos seus nós amigáveis, você deve retornar uma ação (via STDOUT) da seguinte maneira:
0,0 1,3 5,0
O exposto acima significa que você deseja aumentar sua força do primeiro nó, usar seu segundo nó para atacar o quarto nó e seu último nó transferirá sua força no primeiro nó (e se ninguém o atacar, ele se tornará um nó seguro )
Depois de retornar, seu programa deve sair.
Placar
acumulador tem 3240 pontos
elegante conseguiu 2370 pontos
dumbot obteve 2262 pontos
random_bot obteve 1603 pontos
smarter_random_bot obteve 1319 pontos
stead_bot obteve 1097 pontos
O controlador pode ser encontrado aqui: https://github.com/nathanmerrill/NetAttack
fonte
Respostas:
Acumulador, Python
Vamos começar esta festa! Minha submissão deve funcionar tanto no Python 2 quanto no Python 3.
A ideia é realmente simples. Começo a enumerar meus nós em ordem crescente de força, mantendo uma soma contínua das forças. Quando a soma excede a força do nó inimigo mais fraco (+1 para um possível aumento), ataquei esse nó e o removi da piscina, redefinii a soma e continue. No final, se os nós mais fortes não encontrarem alguém para atacar, eles ganharão mais força.
Edição: Acumulador é agora um pouco mais inteligente. Em vez de sempre atacar o nó inimigo mais fraco, ele acumula força até poder fazê-lo e, em seguida, ataca o nó livre mais forte que puder com essa força. Além disso, se ainda houver inimigos no final, qualquer nó não atribuído atacará o inimigo restante mais fraco, apenas no caso de ele decidir transferir sua força.
fonte
Com classe, Python3
O bot divide seus próprios nós em 3 categorias com base na força e cada nó age de acordo com sua categoria.
Resultado contra o acumulador e os dois robôs de amostra:
fonte
Dumbot, Nodejs
O bot atacará sem nenhum pensamento ou estratégia. O objetivo principal é garantir muitos nós seguros logo no início. Esteja ciente de que este bot faz um loop infinito com o acumulador.
fonte
SteadyBot, Node.js
fonte
node SteadyBot.js F20 F4 E7 E2 E20 F2
, funciona para mim. Você poderia, por favor, me dizer a entrada pela qual está falhando?cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js