Das Internet ist ausgefallen. DDoS-Angriffe sind mittlerweile weit verbreitet. Es liegt an Ihnen, die Kontrolle zu übernehmen und das Internet zu reparieren.
Jeder Bot steuert 20 Knoten in diesem Netzwerk. Jeder Knoten ist entweder aktiv oder sicher , hat einen Besitzer und eine Stärke, die bei 2 beginnt. Jeder aktive Knoten ist mit allen anderen aktiven Knoten verbunden.
In jeder Runde erhalten Sie eine Liste aller aktiven Knoten mit ihrer Stärke. Für jeden Ihrer aktiven Knoten haben Sie folgende Möglichkeiten:
- Bestimmen Sie einen aktiven Knoten, den Sie übertragen möchten gesamte Stärke , oder
- Speichern Sie und erhöhen Sie seine Stärke
Dann passiert das Folgende in der richtigen Reihenfolge :
- Ein Knoten, der seine Stärke speichert, erhöht seine Stärke um 1.
- Alle Knoten, die ihre Stärke übertragen möchten, übertragen gleichzeitig ihre gesamte Stärke auf den neuen Knoten.
- Wurde einem Knoten Stärke von einem feindlichen Knoten übertragen, erfolgt ein Angriff. Wenn ein feindlicher Besitzer gemeinsam mehr Stärke überträgt als der ursprüngliche Besitzer (und alle anderen Angreifer), wird dieser Feind zum neuen Besitzer. Die Stärke dieses Knotens wird dann zur Stärke des Angreifers. Wenn es einen Gleichstand für die Stärke gibt, wird der Eigentümer zufällig ausgewählt.
- Alle Knoten ohne Stärke werden als sicher angesehen und geben dem Besitzer 1 Punkt.
Nach 100 Spielen mit 100 Runden gewinnt der Besitzer mit den sichersten Knoten in allen Spielen. EDIT: Ich habe es von 2000 auf 100 Runden geändert, da die letzten 1900 Runden nutzlos waren
IO
Ihnen wird die Liste der aktiven Knoten (über Befehlszeilenargumente) wie folgt übergeben:
F20 F4 E7 E2 E20 F2
F
bezeichnet, dass der Knoten ein freundlicher Knoten ist, und E
bezeichnet, dass der Knoten ein Feind ist.
Für jeden Ihrer befreundeten Knoten sollten Sie eine Aktion (über STDOUT) wie die folgende zurückgeben:
0,0 1,3 5,0
Das oben Gesagte würde bedeuten, dass Sie Ihre Stärke des ersten Knotens erhöhen möchten, Ihren zweiten Knoten zum Angreifen des vierten Knotens verwenden möchten und Ihr letzter Knoten seine Stärke an den ersten Knoten überträgt (und wenn niemand ihn angreift, wird er zu einem sicheren Knoten ).
Nach der Rückkehr sollte Ihr Programm beendet werden.
Anzeigetafel
Akku bekam 3240 Punkte
nobel bekam 2370 Punkte
Dumbot bekam 2262 Punkte
random_bot bekam 1603 Punkte
smarter_random_bot bekam 1319 Punkte
steady_bot bekam 1097 Punkte
Den Controller finden Sie hier: https://github.com/nathanmerrill/NetAttack
quelle
Antworten:
Akku, Python
Lasst uns diese Party beginnen! Mein Beitrag sollte sowohl mit Python 2 als auch mit Python 3 funktionieren.
Die Idee ist wirklich einfach. Ich beginne, meine Knoten in aufsteigender Reihenfolge der Stärke aufzulisten und eine laufende Summe der Stärken aufzubewahren. Wenn die Summe die Stärke des schwächsten feindlichen Knotens überschreitet (+1 für eine mögliche Erhöhung), greife ich diesen Knoten an und entferne ihn aus dem Pool, setze die Summe zurück und fahre fort. Wenn die stärksten Knoten am Ende niemanden zum Angreifen finden, sammeln sie mehr Kraft.
EDIT: Akku ist jetzt ein bisschen schlauer. Anstatt immer den schwächsten feindlichen Knoten anzugreifen, sammelt es die Stärke, bis es dazu in der Lage ist, und greift dann den stärksten freien Knoten mit dieser Stärke an. Wenn am Ende noch Feinde übrig sind, greifen nicht zugewiesene Knoten den schwächsten verbleibenden Feind an, nur für den Fall, dass er beschließt, seine Stärke zu verlieren.
quelle
Nobel, Python3
Der Bot teilt seine eigenen Knoten je nach Stärke in 3 Kategorien auf und jeder Knoten handelt entsprechend seiner Kategorie.
Ergebnis gegen Accumulator und die beiden Sample Bots:
quelle
Dumbot, Nodejs
Der Bot greift an, ohne nachzudenken oder Strategie. Das Hauptziel ist es, gleich zu Beginn eine Menge sicherer Knoten zu gewährleisten. Beachten Sie, dass dieser Bot eine Endlosschleife mit dem Akku macht.
quelle
SteadyBot, Node.js
quelle
node SteadyBot.js F20 F4 E7 E2 E20 F2
, funktioniert es für mich. Könnten Sie mir bitte mitteilen, bei welchem Eingang der Fehler aufgetreten ist?cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js