Internet zawiódł. Ataki DDoS są teraz powszechne i powszechne. Od Ciebie zależy, czy przejmiesz kontrolę i naprawisz internet.
Każdy bot będzie kontrolował 20 węzłów w tej sieci. Każdy węzeł jest aktywny lub bezpieczny , ma właściciela i ma siłę, która zaczyna się od 2. Każdy aktywny węzeł jest połączony ze wszystkimi innymi aktywnymi węzłami.
W każdej turze otrzymasz listę wszystkich aktywnych węzłów z ich siłą. Dla każdego z aktywnych aktywnych węzłów:
- Wskaż aktywny węzeł, który chcesz przenieść cały siłę, lub
- Zapisz i zwiększ jego siłę
Następnie dodaje się dzieje w kolejności :
- Węzeł decydujący się na zapisanie swojej siły zwiększy ją o 1.
- Wszystkie węzły decydujące się na przeniesienie swojej siły będą jednocześnie przenosić całą swoją siłę do nowego węzła.
- Jeśli węzeł został przeniesiony z węzła wroga, nastąpi atak. Jeśli właściciel wroga zbiorowo przenosi więcej siły niż pierwotny właściciel (i wszyscy inni napastnicy), wówczas ten wróg staje się nowym właścicielem. Siła tego węzła staje się wtedy siłą atakującego. Jeśli jest remis, siła zostanie wybrana losowo.
- Wszystkie węzły pozostawione bez siły zostaną uwzględnione bezpieczne i dają 1 punkt właścicielowi.
Po 100 grach na 100 tur wygrywa właściciel z najbezpieczniejszymi węzłami we wszystkich grach. EDYCJA: Zmieniłem go z 2000 na 100 zwojów, ponieważ okazało się, że ostatnie 1900 zwojów były bezużyteczne
IO
Zostanie Ci przekazana lista aktywnych węzłów (za pomocą argumentów wiersza poleceń) w następujący sposób:
F20 F4 E7 E2 E20 F2
F
oznacza, że węzeł jest węzłem przyjaznym, oraz E
oznacza, że węzeł jest wrogiem.
Dla każdego przyjaznego węzła powinieneś zwrócić akcję (poprzez STDOUT) w następujący sposób:
0,0 1,3 5,0
Powyższe oznaczałoby, że chcesz zwiększyć swoją siłę pierwszego węzła, użyć drugiego węzła do zaatakowania czwartego węzła, a twój ostatni węzeł przeniesie jego siłę do pierwszego węzła (a jeśli nikt go nie zaatakuje, stanie się bezpiecznym węzłem ).
Po powrocie program powinien zostać zamknięty.
Tablica wyników
akumulator uzyskał 3240 punktów
z klasą zdobył 2370 punktów
głupi otrzymał 2262 punktów
random_bot zdobył 1603 punktów
smarter_random_bot zdobył 1319 punktów
steady_bot zdobył 1097 punktów
Kontroler można znaleźć tutaj: https://github.com/nathanmerrill/NetAttack
źródło
Odpowiedzi:
Accumulator, Python
Zacznijmy tą imprezę! Moje zgłoszenie powinno działać zarówno na Python 2, jak i Python 3.
Pomysł jest bardzo prosty. Zaczynam wyliczać moje węzły w kolejności rosnącej, utrzymując bieżącą sumę sił. Kiedy suma przekroczy siłę najsłabszego wrogiego węzła (+1 za możliwy wzrost), atakuję ten węzeł i usuwam go z puli, resetuję sumę i kontynuuję. Na koniec, jeśli najsilniejsze węzły nie będą w stanie znaleźć nikogo do ataku, zdobędą więcej siły.
EDYCJA: Akumulator jest teraz trochę mądrzejszy. Zamiast zawsze atakować najsłabszy węzeł wroga, kumuluje siłę, aż będzie w stanie to zrobić, a następnie atakuje najsilniejszym wolnym węzłem, jaki może z tą siłą. Ponadto, jeśli na końcu pozostaną wrogowie, wszelkie nieprzydzielone węzły zaatakują najsłabszego pozostałego wroga, na wypadek, gdyby zdecydował się przenieść swoją siłę.
źródło
Classy, Python3
Bot dzieli własne węzły na 3 kategorie w oparciu o siłę, a każdy węzeł działa zgodnie ze swoją kategorią.
Wynik przeciwko Accumulatorowi i dwóm przykładowym botom:
źródło
Dumbot, Nodejs
Bot zaatakuje bez żadnego myślenia ani strategii. Głównym celem jest zapewnienie wielu bezpiecznych węzłów od samego początku. Pamiętaj, że ten bot tworzy nieskończoną pętlę z akumulatorem.
źródło
SteadyBot, Node.js
źródło
node SteadyBot.js F20 F4 E7 E2 E20 F2
, działa dla mnie. Czy możesz mi powiedzieć dane wejściowe, dla których nie działa?cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js