To wyzwanie się skończyło. Aby zobaczyć ostateczne wyniki zawodników, kliknij tutaj
W tym wyzwaniu każde zgłoszenie jest jednym botem. Każdy bot powinien być funkcją Javascript. Boty będą walczyć o najwyższą łączną wartość złota. Złoto można hodować lub zdobywać za zabijanie innych botów i służy ono do ulepszania leczenia, ataku, ochrony i rolnictwa.
Cel:
W ciągu kilku rund zawierających do 1000 tur (kończy się, gdy pozostanie tylko jeden bot), bot o najwyższej wartości całkowitej (suma uzyskanego złota) jest zwycięzcą.
Okazuje:
W każdej turze każdy żywy bot (> 0 HP) zostanie uruchomiony raz. Może zwrócić ruch, który może być jednym z następujących:
- Leczenie: odzyskuje HP
- Atak: Usuwa HP z innego bota
- Tarcza: Chroni przed późniejszymi atakami
- Ogłuszenie: Pomija następną turę innego bota
- Farma: Zarabia złoto kosztem HP
- Ulepszenie: popraw niektóre ruchy
Wszystkie boty zwrócą swój ruch, zanim zostaną wykonane, więc ogłuszenie, leczenie, atak, tarcza itp. Nie wpłynie na żadne roboty poruszające się później w tej turze. Na przykład, jeśli Bot A ogłusza Bot B, a Bot B podąża za Bot A w kolejności tury, Bot B będzie się poruszał później w tej samej turze, a ogłuszenie nastąpi w następnej turze.
Walka, hodowla i ulepszanie:
Każdy bot ma maksymalną HP 100 i przypisany identyfikator UID od 0 do 99. Ten identyfikator UID zmienia się po każdej rundzie i jest to sposób, w jaki boty śledzą się nawzajem.
Leczenie jest jednym z najprostszych ruchów, dodając ilość HP zależną od jego poziomu (zaczyna się od 5 HP). Bot nie może wyleczyć powyżej 100 HP.
Atakowanie bota za pomocą UID to kolejny możliwy ruch, którego podstawowe obrażenia wynoszą 5 HP na poziomie 0. Boty można również ogłuszyć, pomijając kolejną turę, która również używa UID.
Boty mają dodatkową liczbę PW tarczy, która nie ma limitu. Tarcza HP będzie absorbować obrażenia od bezpośrednich ataków innych botów i jest dodawana przez tarczę. Na poziomie 0 ekranowanie dodaje 5 punktów życia tarczy.
Farma zarobi 5 sztuk złota na poziomie 0, kosztem 2 HP. Tych 2 HP nie można osłonić. Jedynym zastosowaniem złota (oprócz wygrywania) jest ulepszanie ruchów. Leczenie, atakowanie i tarcza mają wartość podstawową 5 HP, a farma zaczyna się od 5 złota. Każdy z tych ruchów ma indywidualne poziomy, które zaczynają się od 0. Te formuły określą wartość HP lub złota ruchu, gdzie L jest poziomem:
- Gojenie:
L + 5
- Napadający:
1.25L + 5
- Zastawianie:
1.5L + 5
- Rolnictwo:
2L + 5
Koszt ulepszenia dowolnego ruchu jest taki sam dla określonego poziomu i jest określony przez 2.5L² + 2.5L + 10
, gdzie L jest poziomem bieżącym. Bot może użyć tej funkcji cost(currentLevel)
jako skrótu, aby to ustalić.
Boty zaczynają się od 25 sztuk złota, co pozwala im szybko ulepszyć dwa ruchy na poziom 1 lub jeden ruch na poziom 2. To początkowe złoto nie liczy się do całkowitej wartości botów. Zabicie bota daje połowę jego całkowitej wartości w złocie, w zaokrągleniu w górę, a jeśli dwa boty zabijają drugiego w tej samej turze, oboje otrzymują nagrodę.
Wejście wyjście:
Aby komunikować się ze sterownikiem, zwracana wartość funkcji służy do wysyłania informacji o ruchu. Jeden z nich powinien zostać zwrócony:
- Uzdrowić:
heal()
- Atak:
attack(uid)
- Tarcza:
shield()
- Oszołomić:
stun(uid)
- Gospodarstwo rolne:
farm()
- Aktualizacja:
upgrade("heal" / "attack" / "shield" / "farm")
Aby pominąć turę (nic nie rób), nic nie zwracaj lub zwróć wartość fałszowania.
Aby uzyskać bieżący numer tury (zaczyna się od 1), użyj turn()
.
Argumenty twojej funkcji będą zawierać informacje o twoim bocie, UID innych botów i przechowywanie między kolejnymi. Pierwszy parametr jest obiekt o następujących właściwościach: uid
, hp
, gold
i shield
. Są to kopie bieżących informacji Twojego bota. Istnieje również zagnieżdżonego obiektu levels
, z numerami szczebla heal
, attack
, shield
i farm
.
Drugi argument jest tasuje tablicę wszystkich żywych robotom niż ty, podany jako przedmiot zawierający właściwości uid
, hp
(wraz z osłoną) worth
i attack
(poziom ataku). Trzeci argument to pusty obiekt, którego można użyć do przechowywania między kolejnymi.
Przykładowe boty:
Ten bot będzie farmował, dopóki nie może ulepszyć swojego ataku do poziomu 5, a następnie za każdym razem atakuje losowego bota, dopóki nie umrze (lub nie wygra). Niezbyt skuteczny z powodu braku leczenia / osłony.
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
Ten bot ma dwa tryby: ofensywny i defensywny. W trybie obronnym ogłusza losowego bota lub leczy, aw trybie ofensywnym atakuje lub osłania. W miarę możliwości będzie próbował ulepszyć swoje ataki.
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
Zasady:
- Standardowe luki zabronione
- Boty nie mogą odczytywać, modyfikować ani dodawać żadnych zmiennych poza swoim zakresem, nie mogą próbować oszukiwać i nie mogą wywoływać żadnych funkcji zdefiniowanych przez kontroler lub DOM
- Zwracana wartość musi być fałszem lub jednym z powyższych wyjść funkcji
- Boty nie powinny być zaprojektowane do celowania w konkretnego bota, ale mogą być zaprojektowane tak, aby wykorzystywać wspólne strategie
- Boty nie mogą się atakować (wykryte z powodu komentarza @Ness)
- Boty muszą się wystarczająco różnić od innych botów, aby można je było rozsądnie uznać za osobne wpisy
- Zespolenie nie jest teraz dozwolone
- Kontroler można znaleźć tutaj
- Pokój rozmów
Debugowanie nowego kontrolera:
Korzystając z pliku gold-battle-log.js
, możesz ustawić wartość debug
właściwości bota botData
na 0 (bez rejestrowania), 1 (log ruchów) lub 2 (log ruchów, hp, złoto, poziomy itp.)
Wyzwanie kończy się o godzinie 17.00 UTC w piątek, 9 sierpnia
źródło
[closed]
na końcu prawdopodobnie sprawi, że zwykli widzowie pominą czytanie mojego wyzwania, ponieważ; zakładają, że jest niskiej jakości lub nie na temat.Odpowiedzi:
Nie do zabicia
rozwidlony z Undyable .
Biorąc pod uwagę wykładnicze koszty ulepszeń, równie dobrze możemy ulepszyć rolnictwo, jeśli nie możemy ulepszyć leczenia, umożliwiając botowi bardziej efektywne zbieranie złota.
źródło
if
użył tego pierwszego stwierdzenia<=
- obecnie nigdy się nie zagoi.ThanosBot
Jest za dużo botów, za mało złota, żeby się obejść. Ten bot proponuje rozwiązanie.
Ludobójstwo, tak, ale losowe, beznamiętne, sprawiedliwe wobec bogatych i biednych.
Nazywali go szaleńcem.
ThanosBot chce tego, co najlepsze dla społeczności botów i jest gotów przejść całą drogę. Na początku ulepszy swój atak, uprawę roli i leczenie, aby skuteczniej zbierać zasoby i wygrywać bitwy. Prograsycznie zacznie atakować ludzi losowo, wciąż zbierając zasoby, na nadchodzące bitwy. Będzie ulepszał swoją armię, swoją broń i siebie.
Gdy 50% populacji zostanie wyeliminowane, urodzone boty będą wiedziały tylko pełne brzuchy i czyste niebo, przejdą na emeryturę i będą oglądać życie wschodzące na wdzięcznym wszechświecie. Stanie się całkowicie pacyfistą, lecząc się wyłącznie zupami warzywnymi i hodowlą.
źródło
Kill Stealer
Teraz nie tylko kradnie zabójstwa, ale także kradnie zabójstwa!
Ten bot nie robi wiele poza farmą, a gdy zauważy taką możliwość, dołącza do ostatecznego ciosu w umierającego wroga i jakoś udaje mu się być bardzo dobrym.
źródło
Korektor
Ten bot stara się przywrócić spokój w społeczności botów. Nieustannie atakuje boty najwyższym atakiem, poddając się tylko wtedy, gdy uzdrowienie bota jest lepsze niż jego własny atak. Gdy nie pozostaną żadne boty o uzdrowieniu gorszym niż jego atak, przejdzie na emeryturę, prowadząc spokojne rolnictwo.
źródło
Optymista
Zakłada, że będzie mógł spędzić 80% swojego czasu na spokojnym uprawianiu ziemi, więc zaczyna od maksymalizacji rolnictwa, a dopiero potem zaczyna zwracać uwagę na swoje umiejętności bojowe. Na pewno nic nie pójdzie źle!
źródło
Kill Assist
Po co zwiększać wartość ataku, skoro możesz zadawać obrażenia i nadal uzyskać pełny kredyt?
Jeszcze raz wróć do piggybacking off Kill Stealer. Byłem w stanie uprościć kilka bloków kodu, w których stwierdzenia były zawsze prawdziwe i majstrowały przy niektórych liczbach, co spowodowało ogromne zyski w stosunku do oryginału.
Muszę przekazać to @dzaimie za uświadomienie sobie, że ogłuszenie bogatego przeciwnika, który prawdopodobnie będzie zaangażowany w asysty na turę przed zabiciem, jest dość sprytny. Jeden z (bardzo) kilku razy
Stun()
ma pozytywny wynik sumy. Po raz kolejny udało mi się ulepszyć ten pomysł, ponieważ wiedząc, że Kill Stealer będzie działał w podobny sposób, Kill Assist szuka „drugiego najlepszego” celu (z pewną dyskrecją) i ogłusza go.Drobna aktualizacja, aby zapobiec ogłuszaniu bota o śmierci i zapobiec ogłuszaniu bota, który najprawdopodobniej zabije.
Przykładowe wyniki (okrojone 5 najlepszych po 1000 gier)
źródło
runGame(1) results: [...] captFarmer: 13768
Undyable Bot (v3)
źródło
PatientStrategistBot
Próbowałem napisać bota, który zaczyna kadrowanie i obronę w razie potrzeby, a następnie przełącza się na zabijanie innych botów o wysokiej wartości w dalszej części gry.
Obecnie nie wydaje się to działać poprawnie, ponieważ albo został zabity przez gang botów-morderców na początku gry, albo utknął gdzieś w trybie ofensywnym.
Nadal jestem bardzo zadowolony z tego, że to mój pierwszy kod JS, więc ... (Kradnąłem fragmenty kodu stąd i tam było to szybsze niż przeglądanie całej podstawowej składni JS)
źródło
Szwajcaria
Jak sama nazwa wskazuje, ten bot jest
neutralny, wwiększości neutralny (teraz pomaga zabijać boty, które umrą), a jedynie farmy i leczy, powoli gromadząc złoto (tak jak Szwajcaria)źródło
Bot, który hoduje, atakuje, osłania, a nawet leczy, ale nigdy nie ogłusza
(Skrócona nazwa to TBTFASAEHBNS , nie należy mylić jej z TBTPTGCBCBA )
Ten bot w zasadzie:
Edycja 1: Naprawiono problem i poprawiono kilka drobnych rzeczy w bocie na podstawie testów z dużą ilością gier.
Edycja 2: Zmniejszone ulepszenia tarczy.
źródło
SniperBot
Ten bot będzie skuteczny tylko wtedy, gdy ktoś zacznie dodawać boty, które faktycznie atakują regularnie. SmartFarmer to moje obecne zoptymalizowane rozwiązanie
sępy nie potrzebują ataku
źródło
int
) w linii 2. ReferenceError: zdrowie nie jest zdefiniowane.me.hp
?if(me.hp <30 && ...)
może być uproszczone do zaledwie pierwszym punkcie z powodu konieczności absurdalny poziom leczyć za to do materii (lvl 65)BullyDozerBot
Mashup of BullyBot i kilka innych bitów. Optymista miał krótki i słodki kawałek oportunistycznego ataku, który wymyśliłem (chociaż inne boty wykonują podobne obliczenia).
Zamiast zastraszać cel ogłuszając go, morduje go za ich słodkie, słodkie łupy. Atakuje także najsłabszych w stadzie pod kątem zastraszania, ale zrezygnuje i po prostu pójdzie na rolnictwo, jeśli HP najsłabszego celu jest zbyt wysoki.
źródło
FizzBuzz
Przeważnie ofensywny bot. Niezwykle zdenerwowany faktem, że nie może tak naprawdę FizzBuzz, więc zamiast tego brzęczy ze złością. Kiedy nie jest to Fizzing ani Buzzing, odłupuje innego bota na 30 tur i poddaje się i wybiera innego bota, którego celem jest cel, jeśli nie robi postępów.
Wykonuje wyjątkowo niekonsekwentnie.Nieważne, zaktualizowałem kontroler, teraz wydaje się, że zawsze znajduje się w połowie pakietu.źródło
bullyBot
Wypróbuj online!
Może nie wygra, ale na pewno dołoży wszelkich starań, aby jego cel też nie. bullyBot farmuje również w pierwszej turze, więc jeśli nie będzie żadnych zewnętrznych wpływów, pokona swój cel 5-0 lub zwiąże je 5-5.
źródło
JustFarm
Myślałem, że zacznę proste.
źródło
ScavengerBot (V2)
Uświadomiłem sobie, że wcześniej nie był to śmieciarz. Nową strategią jest czekanie, aż zabije innego bota. Jeśli nikogo nie można zabić, siedzi i buduje tarczę.
źródło
me.levels.attacl
?Nastrojowy
Domyślną strategią Moody's jest ulepszenie rolnictwa i leczenia, a następnie wyeliminowanie innych botów w malejącej kolejności wartości. Jednak jeśli zostanie zaatakowany, przestraszy się i ponownie skoncentruje na leczeniu. Jeśli zaatakuje i „zawiedzie”, ponieważ ofiara leczyła się lub osłaniała skuteczniej niż atak, rozzłości się i pójdzie ulepszyć swoje umiejętności ataku.
źródło
Bandyta
Pierwsza próba bota uczącego się wzmacniającego. Na razie czysto defensywny, aby zawęzić obszar poszukiwań. Coś w rodzaju mądrzejszego podziału FizzBuzz - powtarza określoną serię pięciu akcji w kółko; pięć akcji wybiera RL.
Ale na razie opiera się on głównie na wyliczaniu - właśnie wygenerowałem wszystkie 3 ^ 5 = 243 permutacje serii pięciu działań obronnych, które powtarzały się w kółko i zapisywałem ich średnie wyniki (podzielone przez 200, aby uzyskać średni zysk ponad pięć obrotów) ponad 100 iteracji w
storage.prior
tablicy. Następnie, w trakcie gry, wprowadza epsilon-chciwe podejście do aktualizacji tych list wyników, aby było bardziej przyszłościowe. (Również dlatego, że użycie epsilon = 0.3 działało o wiele lepiej niż epsilon = 0.1, więc po prostu go zachowałem).Jest w porządku, konsekwentnie umieszczając pomiędzy scavengerBot i Optimist. Obecnie ćwiczę trochę więcej na temat prawdziwych gier i szukam lepszych sposobów na opracowanie strategii, aby sprawdzić, czy mogę ją ulepszyć.
źródło
Opportunista
Ten pożyczył trochę od kilku innych (zwłaszcza ScavengerBot (V2) i Unkillable), ponieważ mieli te same pomysły, które miałem na myśli, ale ogólnie lubię dobrze zaokrąglone style i walory typu all-of-trade, zamiast skupiać się tylko na jedna lub dwie rzeczy. To prawdopodobnie będzie oznaczać, że nie wygram, ale powinno to być gdzieś pośrodku (co zdarza mi się przez większość czasu w wielu sprawach).
Więc kradnie soczyste zabójstwa; leczy, jeśli to konieczne; ulepsza farmę, atak i leczenie w tej kolejności; i farmy w inny sposób.
źródło
others
ScaredBot
highest attack * (25% of bots)
lub zbliża się do dolnego końcaHP + shield
, wtedy osłania< 50
, leczy.Chodzi o to, aby pozostać przy życiu jak najdłużej, a w przeciwnym razie spróbować zdobyć złoto w bezpieczny i tani sposób, aby móc ulepszyć.
Priorytety ulepszeń powinny zostać prawdopodobnie poprawione, a także warunek przy określaniu, czy należy chronić.
źródło
SmartFarmer
Farmy, ulepsza farmę, leczy, jeśli ma niskie zdrowie. Rolnictwo wydawało się obezwładnione, dopóki nie pojawiły się naprawdę ofensywne boty. Teraz mój bot został zabity :-(
źródło
Mort
W każdej turze porównuje zamortyzowany zysk z zabicia każdego bota z zyskiem z hodowli i leczenia i wybiera najlepszą opcję. Naprawdę powinien użyć stanu, aby dowiedzieć się, ile czasu zajmie zabicie bota, ale na razie zakłada, że każdy bot leczy lub osłania średnio 5 punktów za obrót bez obrażeń zadawanych przez inne boty.
źródło
Przyjazny bot
others[0].hp
jesthp + shield
zamiasthp
...źródło
Księgowy
Ten praktyczny bot oblicza najbardziej korzystny ekonomicznie ruch, ale lubi utrzymywać niski profil ataku, aby uniknąć kłopotów ze strony wszystkich czujnych botów. Nie próbuje pomóc bezbronnym ani ich na nich polować. Raczej robi to, co najbardziej mu pomaga.
źródło
reallyCommittedTurtle
To jest ta rzecz. Na zewnątrz jest naprawdę niebezpiecznie. Farming w ogóle zwiększa twoją wartość, czyniąc cię celem. Więc naprawdę nie jest bezpiecznie uprawiać ziemię, dopóki nie zbudujesz ogromnej tarczy, a cała przemoc ustanie. Następnie możesz wystawić głowę ze skorupy i rozpocząć uprawę. Lub pomoc w zabiciu. Cokolwiek się opłaca lepiej.
źródło
Opiekun
Mogę mieć więcej niż jedno zgłoszenie, prawda?
Widelec CampBot. Nie osłania, zamiast tego skupia się na atakowaniu. Wykazuje preferencje dla atakujących graczy z wyższymi statystykami ataku, zamiast atakować losowo, jak CampBot. Koncentruje się na ulepszaniu rolnictwa, a nie na leczeniu.
źródło
let victim=potentialVictims[Math.floor(Math.random()*potentialVictims.length)]
Rando
Ten głupi facet wybierze działania oparte na jednolitej losowości z pewnymi uprzedzeniami. Jeśli losowo wybrana akcja nie zadziała, spada do następnego wyboru.
Średnio więc powinien atakować prawie 2/9 czasu i farmować prawie 3/9 czasu. Reszta ma około 1/9 szansy, jeśli uda mu się ulepszyć lub jeśli warto skorzystać z leczenia / ochrony itp.
Prawdopodobnie nie osiągnie dobrych wyników, ale przynajmniej istnieje niewielka szansa, że będzie panował najwyższy. I to jest cały cel Rando. Musi po prostu uwierzyć w siebie! Wszystkie opcje są przed nim. Musi tylko wybrać to, co jest potrzebne w danej sytuacji.
(Wiem, że „default” nie jest konieczne, ale myślę, że jest to dobra praktyka kodowania dla solidnego kodu).
źródło
Kill Bot
Prosty bot, Kill Bot chce po prostu zabić swoich wrogów. Ponieważ osłona jest znacznie bardziej wydajna niż leczenie (zwłaszcza gdy jest wyrównywana), Kill Bot stara się zawsze być nieatrakcyjnym celem, osłaniając się przy każdym ataku. Kill Bot radzi sobie całkiem nieźle wśród słabych, pacyfistycznych botów tutaj (możesz poczuć ich pogardę).
źródło
o.attack
to poziom ataku, a nie jego obrażeniaFarmHeal Bot
Opracowano z bota @Anonymous „JustFarm
źródło
niezniszczalna
Modyfikacja bota Draco18 przy użyciu tarcz (bardziej skuteczny przeciwko innym botom)
źródło