El Internet ha fallado. Los ataques DDoS ahora son rampantes y generalizados. Depende de usted tomar el control y reparar Internet.
Cada bot controlará 20 nodos en esta red. Cada nodo es activo o seguro , tiene un propietario y tiene una fuerza, que comienza en 2. Cada nodo activo está conectado a todos los demás nodos activos.
Cada turno, recibirá una lista de todos los nodos activos con su fuerza. Para cada uno de los nodos activos que posee, usted:
- Designe un nodo activo al que desee transferir toda su fuerza, o
- Ahorra y aumenta su fuerza
Entonces sucede lo siguiente en orden :
- Un Nodo que elija guardar su fuerza aumentará su fuerza en 1.
- Todos los nodos que eligen transferir su fuerza transferirán simultáneamente toda su fuerza al nuevo nodo.
- Si a un nodo se le transfirió la fuerza de un nodo enemigo, se producirá un ataque. Si un propietario enemigo transfiere colectivamente más fuerza que el propietario original (y todos los demás atacantes), ese enemigo se convierte en el nuevo propietario. La fuerza de ese nodo se convierte en la fuerza del atacante. Si hay un empate para la fuerza, entonces el propietario será elegido al azar.
- Todos los nodos que queden sin fuerza se considerarán seguros y otorgan 1 punto al propietario.
Después de 100 juegos de 100 turnos, gana el propietario con los nodos más seguros en todos los juegos. EDITAR: lo cambié de 2000 a 100 turnos, ya que terminó siendo inútil los últimos 1900 turnos
IO
Se le pasará la lista de nodos activos (a través de argumentos de línea de comando) como el siguiente:
F20 F4 E7 E2 E20 F2
F
designa que el nodo es un nodo amigo y E
designa que el nodo es un enemigo.
Para cada uno de sus nodos amigos, debe devolver una acción (a través de STDOUT) como la siguiente:
0,0 1,3 5,0
Lo anterior significaría que desea aumentar su fuerza del primer nodo, usar su segundo nodo para atacar al cuarto nodo, y su último nodo transferirá su fuerza al primer nodo (y si nadie lo ataca, se convertirá en un nodo seguro )
Después de regresar, su programa debería salir.
Marcador
acumulador consiguió 3240 puntos
elegante consiguió 2370 puntos
dumbot consiguió 2262 puntos
random_bot obtuvo 1603 puntos
smarter_random_bot obtuvo 1319 puntos
steady_bot obtuvo 1097 puntos
El controlador se puede encontrar aquí: https://github.com/nathanmerrill/NetAttack
fuente
Respuestas:
Acumulador, Python
¡Vamos a empezar esta fiesta! Mi envío debería funcionar tanto en Python 2 como en Python 3.
La idea es realmente simple. Comienzo a enumerar mis nodos en orden ascendente de fuerza, manteniendo una suma de las fortalezas. Cuando la suma excede la fuerza del nodo enemigo más débil (+1 por un posible aumento), ataco ese nodo y lo elimino del grupo, restablezco la suma y continúo. Al final, si los nodos más fuertes no pueden encontrar a nadie para atacar, obtendrán más fuerza.
EDITAR: el acumulador ahora es un poco más inteligente. En lugar de atacar siempre al nodo enemigo más débil, acumula la fuerza hasta que pueda hacerlo, y luego ataca al nodo libre más fuerte que pueda con esa fuerza. Además, si todavía quedan enemigos al final, los nodos no asignados atacarán al enemigo restante más débil, en caso de que decida transferir su fuerza.
fuente
Con clase, Python3
El bot divide sus propios nodos en 3 categorías según la fuerza y cada nodo actúa de acuerdo con su categoría.
Resultado contra el acumulador y los dos bots de muestra:
fuente
Dumbot, Nodejs
El bot atacará sin ningún pensamiento o estrategia. El objetivo principal es garantizar una gran cantidad de nodos seguros desde el principio. Tenga en cuenta que este bot crea un bucle infinito con acumulador.
fuente
SteadyBot, Node.js
fuente
node SteadyBot.js F20 F4 E7 E2 E20 F2
, me funciona. ¿Podría decirme la entrada por la que está fallando?cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js