Internet a échoué. Les attaques DDoS sont désormais endémiques et répandues. C'est à vous de prendre le contrôle et de réparer Internet.
Chaque bot contrôlera 20 nœuds de ce réseau. Chaque nœud est actif ou sûr , a un propriétaire et a une force, qui commence à 2. Chaque nœud actif est connecté à tous les autres nœuds actifs.
Chaque tour, vous recevrez une liste de tous les nœuds actifs avec leur force. Pour chacun des nœuds actifs que vous possédez, vous:
- Désignez un nœud actif vers lequel vous souhaitez transférer toute votre force, ou
- Enregistrer et augmenter sa force
Ensuite, les événements suivants se produisent dans l'ordre :
- Un nœud choisissant de sauvegarder sa force augmentera sa force de 1.
- Tous les nœuds qui choisissent de transférer leur force transfèreront simultanément toute leur force au nouveau nœud.
- Si un nœud a été transféré de la force d'un nœud ennemi, une attaque s'ensuivra. Si un propriétaire ennemi transfère collectivement plus de force que le propriétaire d'origine (et tous les autres attaquants), cet ennemi devient le nouveau propriétaire. La force de ce nœud devient alors la force de l'attaquant. S'il y a une égalité pour la force, le propriétaire sera choisi au hasard.
- Tous les nœuds laissés sans force seront considérés comme sûrs et donnent 1 point au propriétaire.
Après 100 parties de 100 tours, le propriétaire avec les nœuds les plus sûrs de toutes les parties gagne. EDIT: Je l'ai changé de 2000 à 100 tours, car il s'est avéré que les 1900 derniers tours étaient inutiles
IO
Vous recevrez la liste des nœuds actifs (via les arguments de ligne de commande) comme suit:
F20 F4 E7 E2 E20 F2
F
désigne que le nœud est un nœud ami et E
désigne que le nœud est un ennemi.
Pour chacun de vos nœuds amis, vous devez retourner une action (via STDOUT) comme celle-ci:
0,0 1,3 5,0
Ce qui précède signifierait que vous souhaitez augmenter votre force du premier nœud, utilisez votre deuxième nœud pour attaquer le quatrième nœud, et votre dernier nœud transférera sa force le premier nœud (et si personne ne l'attaque, il deviendra un nœud sûr ).
Après votre retour, votre programme devrait se fermer.
Tableau d'affichage
accumulateur a obtenu 3240 points
chic a obtenu 2370 points
dumbot a obtenu 2262 points
random_bot a obtenu 1603 points
smarter_random_bot a obtenu 1319 points
regular_bot a obtenu 1097 points
Le contrôleur peut être trouvé ici: https://github.com/nathanmerrill/NetAttack
la source
Réponses:
Accumulateur, Python
Que la fête commence! Ma soumission devrait fonctionner à la fois sur Python 2 et Python 3.
L'idée est vraiment simple. Je commence à énumérer mes nœuds par ordre croissant de force, en conservant une somme cumulée des forces. Lorsque la somme dépasse la force du nœud ennemi le plus faible (+1 pour une augmentation possible), j'attaque ce nœud et le retire du pool, réinitialise la somme et continue. À la fin, si les nœuds les plus forts ne trouvent personne à attaquer, ils collecteront plus de force.
EDIT: L' accumulateur est maintenant un peu plus intelligent. Au lieu d'attaquer toujours le nœud ennemi le plus faible, il accumule la force jusqu'à ce qu'il puisse le faire, puis attaque le nœud libre le plus fort qu'il peut avec cette force. De plus, s'il reste des ennemis à la fin, tous les nœuds non affectés attaqueront l'ennemi le plus faible restant, juste au cas où il déciderait de transférer sa force.
la source
Classy, Python3
Le bot divise ses propres nœuds en 3 catégories en fonction de la force et chaque nœud agit en fonction de sa catégorie.
Résultat contre l'accumulateur et les deux échantillons de robots:
la source
Dumbot, Nodejs
Le bot attaquera sans aucune réflexion ni stratégie. L'objectif principal est d'assurer un grand nombre de nœuds sûrs dès le début. Sachez que ce bot fait une boucle infinie avec accumulateur.
la source
SteadyBot, Node.js
la source
node SteadyBot.js F20 F4 E7 E2 E20 F2
, cela fonctionne pour moi. Pourriez-vous s'il vous plaît me dire l'entrée pour laquelle il échoue?cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js