Diese Herausforderung ist beendet. Klicken Sie hier, um die Endergebnisse der Wettbewerber anzuzeigen
Bei dieser Herausforderung ist jeder Beitrag ein Bot. Jeder Bot sollte eine Javascript-Funktion sein. Bots kämpfen um den höchsten Goldwert. Gold kann gezüchtet oder durch das Töten anderer Bots verdient werden und wird verwendet, um Heilung, Angriffe, Abschirmung und Landwirtschaft zu verbessern.
Zielsetzung:
Bei einer Anzahl von Runden mit bis zu 1000 Runden (endet, wenn nur noch ein Bot übrig ist) gewinnt der Bot mit dem höchsten Gesamtwert (die Summe aller erhaltenen Goldstücke).
Wendet sich:
In jedem Zug wird jeder Bot, der lebt (> 0 HP), einmal ausgeführt. Es kann eine Bewegung zurückgeben, die eine der folgenden sein kann:
- Heilen: Gewinnt HP zurück
- Angriff: Entfernt HP von einem anderen Bot
- Schild: Verteidigt sich gegen spätere Angriffe
- Betäuben: Überspringt den nächsten Zug eines anderen Bots
- Farm: Verdient Gold auf Kosten von HP
- Upgrade: Machen Sie bestimmte Züge besser
Alle Bots geben ihren Zug zurück, bevor einer ausgeführt wird. Betäubung, Heilung, Angriff, Schild usw. wirken sich nicht auf Bots aus, die sich später in diesem Zug bewegen. Wenn zum Beispiel Bot A Bot B betäubt und Bot B in der Reihenfolge nach Bot A ist, bewegt sich Bot B immer noch später in derselben Runde und die Betäubung erfolgt in der nächsten Runde.
Kampf, Landwirtschaft und Aufwertung:
Jeder Bot hat eine maximale HP von 100 und eine zugewiesene UID zwischen 0 und 99. Diese UID ändert sich nach jeder Runde und zeigt an, wie Bots sich gegenseitig überwachen.
Heilung ist einer der einfachsten Schritte, bei dem eine HP-Menge hinzugefügt wird, die von der Stufe abhängt (ab 5 HP). Ein Bot kann nicht mehr als 100 HP heilen.
Das Angreifen eines Bots mit seiner UID ist ein weiterer möglicher Zug mit einem Grundschaden von 5 HP auf Stufe 0. Bots können auch betäubt werden, indem sie ihren nächsten Zug überspringen, der ebenfalls UIDs verwendet.
Bots haben zusätzliche Schild-HP, die keine Begrenzung haben. Dieser Schild HP absorbiert Schaden durch direkte Angriffe anderer Bots und wird durch Abschirmung hinzugefügt. Bei Stufe 0 erhöht die Abschirmung die HP um 5 Schilde.
Die Landwirtschaft erhält 5 Goldpunkte auf Stufe 0 zu einem Preis von 2 HP. Diese 2 HP können nicht abgeschirmt werden. Die einzige Verwendung für Gold (über das Gewinnen hinaus) ist das Aktualisieren von Zügen. Heilung, Angriff und Abschirmung haben einen Grundwert von 5 HP, und die Landwirtschaft beginnt bei 5 Gold. Jede dieser Bewegungen hat individuelle Stufen, die bei 0 beginnen. Diese Formeln bestimmen den Wert in HP oder Gold einer Bewegung, wobei L die Stufe ist:
- Heilung:
L + 5
- Angreifen:
1.25L + 5
- Abschirmung:
1.5L + 5
- Landwirtschaft:
2L + 5
Die Kosten für ein Upgrade eines Zuges sind für eine bestimmte Stufe gleich und werden dadurch bestimmt 2.5L² + 2.5L + 10
, wobei L die aktuelle Stufe ist. Ein Bot kann die Funktion cost(currentLevel)
als Abkürzung verwenden, um dies zu bestimmen.
Bots beginnen mit 25 Goldpunkten, sodass sie entweder zwei Züge auf Stufe 1 oder einen auf Stufe 2 aufrüsten können. Dieses anfängliche Gold zählt nicht für den Gesamtwert eines Bots. Wenn du einen Bot tötest, erhältst du die Hälfte seines Gesamtwerts an Gold, aufgerundet. Wenn zwei Bots in derselben Runde einen anderen töten, erhalten beide die Belohnung.
Input-Output:
Um mit der Steuerung zu kommunizieren, wird der Rückgabewert der Funktion zum Senden von Bewegungsinformationen verwendet. Eine davon sollte zurückgegeben werden:
- Heilen:
heal()
- Attacke:
attack(uid)
- Schild:
shield()
- Betäuben:
stun(uid)
- Bauernhof:
farm()
- Aktualisierung:
upgrade("heal" / "attack" / "shield" / "farm")
Um eine Runde zu überspringen (nichts zu tun), nichts zurückzugeben oder einen falschen Wert zurückzugeben.
Verwenden Sie, um die aktuelle Zugnummer (beginnt bei 1) abzurufen turn()
.
Zu den Argumenten Ihrer Funktion gehören Informationen zu Ihrem Bot, UIDs anderer Bots und Speicher zwischen den Runden. Das erste Argument ist ein Objekt mit den folgenden Eigenschaften: uid
, hp
, gold
, und shield
. Dies sind Kopien der aktuellen Informationen Ihres Bots. Es gibt auch ein verschachteltes Objekt levels
, mit den Pegelzahlen heal
, attack
, shield
, und farm
.
Das zweite Argument ist ein Shuffled Array aller alive Bots außer dein, als Objekt formatiert Eigenschaften enthält uid
, hp
(plus shield), worth
und attack
(Attack - Ebene). Das dritte Argument ist ein leeres Objekt, das für die Speicherung zwischen den Runden verwendet werden kann.
Beispiel Bots:
Dieser Bot wird so lange gezüchtet, bis er seinen Angriff auf Stufe 5 verbessern kann. Anschließend wird in jeder Runde ein zufälliger Bot angegriffen, bis er stirbt (oder gewinnt). Nicht sehr effektiv wegen mangelnder Heilung / Abschirmung.
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);
}
Dieser Bot hat zwei Modi: Offensiv und Defensiv. Es wird entweder einen zufälligen Bot betäuben oder heilen, wenn es sich im defensiven Modus befindet, und es wird entweder angreifen oder beschützen, wenn es sich im offensiven Modus befindet. Es wird versuchen, seine Angriffe nach Möglichkeit zu aktualisieren.
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();
}
Regeln:
- Standardschlupflöcher verboten
- Bots dürfen keine Variablen außerhalb ihres Gültigkeitsbereichs lesen, ändern oder hinzufügen, dürfen nicht versuchen zu schummeln und dürfen keine vom Controller definierten oder DOM-Funktionen aufrufen
- Der Rückgabewert muss falsch sein oder einer der obigen Funktionsausgänge
- Bots sollten nicht so konzipiert sein, dass sie auf einen bestimmten Bot abzielen, sondern können so konzipiert sein, dass sie gemeinsame Strategien nutzen
- Bots dürfen sich nicht selbst angreifen (entdeckt aufgrund eines Kommentars von @Ness)
- Bots müssen sich ausreichend von anderen Bots unterscheiden, damit sie als separate Einträge angesehen werden können
- Teaming ist jetzt nicht erlaubt
- Controller finden Sie hier
- Chatroom
Neues Controller-Debugging:
Mithilfe der Datei gold-battle-log.js
können Sie den Wert der debug
Eigenschaft eines Bots botData
auf 0 (keine Protokollierung), 1 (Protokollbewegungen) oder 2 (Protokollbewegungen, HP, Gold, Ebenen usw.) setzen.
Die Challenge endet am Freitag, den 9. August um 17:00 Uhr UTC
quelle
[closed]
am Ende wird es wahrscheinlich dazu führen, dass Gelegenheitszuschauer meine Herausforderung überspringen, da sie davon ausgehen, dass sie von geringer Qualität ist oder nicht zum Thema gehört.Antworten:
Nicht zu töten
aus Undyable gegabelt .
Angesichts der exponentiellen Kosten von Upgrades kann auch die Landwirtschaft verbessert werden, wenn die Heilung nicht verbessert werden kann, sodass der Bot Gold effizienter sammeln kann.
quelle
if
Anweisung verwendet wird<=
- derzeit wird er nie vollständig verheilen.ThanosBot
Es gibt zu viele Bots, nicht genug Gold, um herumzulaufen. Dieser Bot schlägt eine Lösung vor.
Genozid, ja, aber zufällig, leidenschaftslos, fair zu Arm und Reich.
Sie nannten ihn einen Verrückten.
ThanosBot möchte das Beste für die Bot-Community und ist bereit, den ganzen Weg zu gehen. Zu Beginn wird er seinen Angriff, seine Landwirtschaft und seine Heilung verbessern, um Ressourcen effizienter zu sammeln und Schlachten zu gewinnen. Prograssiv greift er zufällig Leute an und sammelt gleichzeitig Ressourcen für bevorstehende Kämpfe. Er wird seine Armee, seine Waffen und sich selbst weiter verbessern.
Sobald 50% der Bevölkerung eliminiert sind, werden die geborenen Bots nur noch vollen Bauch und klaren Himmel kennen, er wird sich in die Landwirtschaft zurückziehen und den Sonnenaufgang auf einem dankbaren Universum beobachten. Er wird völlig pazifistisch und heilt sich nur mit Gemüsesuppen und Landwirtschaft.
quelle
Töte Stealer
Jetzt stiehlt nicht nur Kills, sondern auch Kills!
Dieser Bot macht nicht viel außer Farm, und wenn er die Möglichkeit bemerkt, schlägt er einen sterbenden Feind und schafft es irgendwie, sehr gut zu sein.
quelle
Der Ausgleicher
Dieser Bot versucht, den Frieden in der Bot-Community wiederherzustellen. Er zielt unerbittlich auf die Bots mit dem höchsten Angriff ab und gibt nur auf, wenn die Heilung des Bots besser ist als sein eigener Angriff. Sobald keine Bots übrig sind, deren Heilung schlimmer ist als der Angriff, zieht er sich in ein Leben in friedlicher Landwirtschaft zurück.
quelle
Optimist
Vorausgesetzt, es wird 80% seiner Zeit friedlich bewirtschaften können, so beginnt es mit der Maximierung der Bewirtschaftung und fängt erst dann an, auf seine Kampffertigkeiten zu achten. Es wird bestimmt nichts schief gehen!
quelle
Kill Assist
Warum den Angriffswert erhöhen, wenn Sie Plinkschaden verursachen und trotzdem die volle Punktzahl erhalten können?
Noch einmal zurück zum Huckepack Kill Stealer. Ich konnte mehrere Codeblöcke vereinfachen, in denen Aussagen immer wahr waren und mit Zahlen spielten, was zu massiven Gewinnen gegenüber dem Original führte.
Ich muss es @dzaima geben, um zu erkennen, dass es ziemlich klug ist, einen reichen Gegner zu betäuben, der wahrscheinlich an einer Assistenz beteiligt ist, bevor ein Kill stattfindet. Eines der (sehr) wenigen Male
Stun()
hat ein positives Gesamtergebnis. Wieder einmal konnte ich die Idee verbessern, da Kill Assist in dem Wissen, dass Kill Stealer eine ähnliche Logik ausführen wird, nach einem "zweitbesten" Ziel sucht (mit etwas Diskretion) und diese stattdessen betäubt.Geringfügiges Update, um das Betäuben des Bot, der kurz vor dem Tod steht, und das Betäuben des Bot, der mit größter Wahrscheinlichkeit den Tod herbeiführt, zu verhindern.
Beispielergebnisse (abgeschnittene Top 5 nach 1000 Spielen)
quelle
runGame(1) results: [...] captFarmer: 13768
Unsterblicher Bot (v3)
quelle
PatientStrategistBot
Ich habe versucht, einen Bot zu schreiben, der nach Bedarf mit dem Framing und der Verteidigung beginnt und später im Spiel andere Bots mit hohem Wert tötet.
Derzeit scheint dies nicht richtig zu funktionieren, da es entweder zu Beginn des Spiels von einer Bande von Mord-Bots getötet wurde oder irgendwo in seinem offensiven Modus hängen bleibt.
Immer noch ziemlich zufrieden damit, dass dies mein erster JS-Code ist, also ... (Ich habe Code-Schnipsel von hier und da gestohlen, weil das schneller war, als die gesamte JS-Basissyntax zu googeln.)
quelle
Schweiz
Wie der Name schon sagt, ist dieser Bot
neutral,meistens neutral (jetzt hilft er, Bots zu töten, die sterben werden) und nur Farmen und Heilungen, wobei er langsam sein Goldaufbaut(genau wie die Schweiz).quelle
Der Bot, der bewirtschaftet, angreift, schützt und sogar heilt, aber niemals betäubt
( Kurzname ist TBTFASAEHBNS , nicht mit TBTPTGCBCBA zu verwechseln )
Dieser Bot im Grunde:
Edit 1: Ein Problem wurde behoben und einige kleine Dinge im Bot wurden verbessert, basierend auf Tests mit vielen Spielen.
Edit 2: Schild-Upgrades wurden reduziert.
quelle
SniperBot
Dieser Bot ist nur dann wirksam, wenn jemand beginnt, Bots hinzuzufügen, die tatsächlich regelmäßig angreifen. SmartFarmer ist meine derzeit optimierte Lösung
Geier brauchen keinen Angriff
quelle
int
) in Zeile 2. ReferenceError: Zustand ist nicht definiert.me.hp
?if(me.hp <30 && ...)
könnte es auf die erste Klausel vereinfachen, weil man ein absurdes Maß an Heilung braucht, damit es eine Rolle spielt (Stufe 65)BullyDozerBot
Mashup von BullyBot und einigen anderen Teilen. Der Optimist hatte ein kurzes und süßes Stück mit opportunistischen Angriffen, das ich angesprochen habe (obwohl andere Bots ähnliche Berechnungen anstellten).
Anstatt das Ziel zu schikanieren, indem man es betäubt, werden sie wegen ihrer süßen, süßen Beute ermordet . Es zielt auch auf die Schwächsten in der Herde ab, um sie zu schikanieren, aber es gibt auf und geht in die Landwirtschaft, wenn die HP des schwächsten Ziels zu hoch sind.
quelle
FizzBuzz
Meistens anstößiger Bot. Sehr verärgert über die Tatsache, dass es nicht wirklich FizzBuzz kann und stattdessen nur wütend summt. Wenn es nicht zischend oder summend ist, zersplittert es einen anderen Bot für 30 Runden und gibt auf und wählt einen anderen Bot als Ziel aus, wenn es keine Fortschritte macht.
Leistung außerordentlich uneinheitlich.Egal, der Controller wurde aktualisiert und scheint nun immer in der Mitte des Pakets zu sein.quelle
BullyBot
Probieren Sie es online!
Kann nicht gewinnen, wird aber mit Sicherheit sein Bestes geben, um sicherzustellen, dass sein Ziel es auch nicht tut. bullyBot bewirtschaftet auch in der ersten Runde, sodass er sein Ziel mit 5: 0 besiegt oder mit 5: 5 bindet, wenn es keinen Einfluss von außen gibt.
quelle
JustFarm
Ich dachte, ich würde einfach anfangen.
quelle
ScavengerBot (V2)
Es wurde mir klar, dass es vorher kein wirklicher Aasfresser war. Neue Strategie ist warten, bis es einen anderen Bot töten kann. Wenn niemand getötet werden kann, sitzt es und baut Schild auf.
quelle
me.levels.attacl
?Launisch
Moody's Standardstrategie besteht darin, die Landwirtschaft und die Heilung für eine Weile zu verbessern und dann die anderen Bots in absteigender Reihenfolge ihres Werts auszuschalten. Wenn es jedoch angegriffen wird, wird es ängstlich und konzentriert sich für eine Weile wieder auf die Heilung. Wenn es angreift und "scheitert", weil das Opfer wirksamer geheilt oder abgeschirmt hat als der Angriff, wird es wütend und verbessert seine Angriffsfähigkeiten.
quelle
Bandit
Erster Versuch eines Verstärkungslernbots. Vorerst rein defensiv, um den Suchraum einzugrenzen. Eine Art intelligenter Nebeneffekt von FizzBuzz - es wiederholt eine bestimmte Reihe von fünf Aktionen immer wieder. Die fünf Aktionen werden von RL ausgewählt.
Aber es basiert im Moment hauptsächlich auf Aufzählungen - ich habe gerade alle 3 ^ 5 = 243 Permutationen von Serien von fünf Verteidigungsaktionen generiert, die sich immer wieder wiederholten, und ihre Durchschnittswerte (geteilt durch 200) gespeichert, um den Durchschnittsgewinn zu erhalten fünf Umdrehungen) über 100 Iterationen im
storage.prior
Array. Während des Spiels wird dann ein Epsilon-gieriger Ansatz implementiert, um diese Punktelisten zu aktualisieren, damit sie zukunftssicherer sind. (Auch weil die Verwendung von epsilon = 0.3 viel besser war als epsilon = 0.1, habe ich es einfach beibehalten.)Es ist in Ordnung, konsequent zwischen ScavengerBot und Optimist zu platzieren. Momentan mache ich ein bisschen mehr Training für echte Spiele und suche nach besseren Möglichkeiten, die Strategie zu gestalten, um zu sehen, ob ich sie verbessern kann.
quelle
Der Opportunist
Dieser leiht sich ein bisschen von ein paar anderen (insbesondere ScavengerBot (V2) und Unkillable) aus, da sie die gleichen Ideen hatten, die ich mir vorgestellt hatte, aber ich mag im Allgemeinen Rundungen und Alleskönner-Stile mehr, als mich nur darauf zu konzentrieren ein oder zwei Dinge. Dies wird wahrscheinlich bedeuten, dass ich nicht gewinnen werde, aber es sollte irgendwo in der Mitte sein (was mir die meiste Zeit in vielen Dingen passiert).
So stiehlt es saftige Kills; heilt wenn nötig; Verbessert die Farm, greift an und heilt in dieser Reihenfolge. und Farmen sonst.
quelle
others
ScaredBot
highest attack * (25% of bots)
oder sich dem unteren Ende nähertHP + shield
, wird er abgeschirmt< 50
, heilt es.Die Idee ist, so lange wie möglich am Leben zu bleiben und ansonsten Gold auf sichere und kostengünstige Weise zu beschaffen, um ein Upgrade durchführen zu können.
Die Upgrade-Prioritäten sollten wahrscheinlich angepasst werden, ebenso wie die Bedingungen, unter denen entschieden wird, ob ein Schild angebracht werden soll.
quelle
SmartFarmer
Farmen, Upgrades der Landwirtschaft, heilt bei geringer Gesundheit. Die Landwirtschaft schien überfordert zu sein, bis die wirklich offensiven Bots eintrafen. Jetzt wird mein Bot getötet :-(
quelle
Mort
Jede Runde vergleicht den amortisierten Gewinn, den das Töten eines Bots mit dem der Landwirtschaft und Heilung erzielt, und wählt die beste Option aus. Eigentlich sollte der Status verwendet werden, um herauszufinden, wie lange es dauern wird, einen Bot zu töten, aber im Moment wird davon ausgegangen, dass jeder Bot durchschnittlich 5 Punkte pro Runde heilt oder abschirmt, abzüglich des Schadens, den andere Bots anrichten.
quelle
Freundlicher Bot
others[0].hp
isthp + shield
statthp
...quelle
Der Buchhalter
Dieser praktische Bot berechnet den wirtschaftlich günstigsten Zug, möchte aber sein Angriffsprofil niedrig halten, um Ärger durch alle vigilanten Bots zu vermeiden. Er versucht nicht, den Wehrlosen zu helfen oder sie zu jagen. Er tut vielmehr das, was ihm am meisten hilft.
quelle
reallyCommittedTurtle
Hier ist das Ding. Es ist wirklich gefährlich geworden da draußen. Die Landwirtschaft erhöht Ihren Wert und macht Sie zu einem Ziel. Es ist also wirklich nicht sicher zu farmen, bis du einen riesigen Schild aufgebaut hast und die Gewalt nachgelassen hat. Dann können Sie Ihren Kopf aus der Schale stecken und mit der Landwirtschaft beginnen. Oder tötungsunterstützend. Was sich auszahlt, ist besser.
quelle
Wächter
Ich kann mehr als eine Einreichung haben, oder?
Eine Gabelung von CampBot. Schildt nicht ab, sondern konzentriert sich auf Angriffe. Zeigt eine Präferenz für das Angreifen von Spielern mit höheren Angriffswerten, anstatt wie CampBot zufällig zu schlagen. Konzentriert sich eher auf die Verbesserung der Landwirtschaft als auf die Heilung.
quelle
let victim=potentialVictims[Math.floor(Math.random()*potentialVictims.length)]
Rando
Dieser alberne Typ wählt Aktionen basierend auf einheitlicher Zufälligkeit mit einigen Vorurteilen. Wenn eine zufällig ausgewählte Aktion nicht funktioniert, wechselt sie zur nächsten Auswahl.
Im Durchschnitt sollte er also fast 2/9 der Zeit angreifen und fast 3/9 der Zeit bewirtschaften. Der Rest hat eine Chance von etwa 1/9, wenn er upgraden kann oder wenn die Heilung / Abschirmung es wert ist, usw.
Er wird wahrscheinlich nicht gut abschneiden, aber es gibt zumindest eine kleine Chance, dass er an der Spitze steht. Und das ist der ganze Zweck von Rando. Er muss nur an sich glauben! Alle Optionen sind vor ihm gelegt. Er braucht nur zu wählen, was für eine gegebene Situation benötigt wird.
(Ich weiß, dass "Standard" nicht erforderlich ist, aber ich denke, es ist eine gute Codierungspraxis für robusten Code.)
quelle
Töte Bot
Als einfacher Bot will Kill Bot nur seine Feinde töten. Da das Abschirmen viel effizienter ist als das Heilen (besonders wenn es im Level ist), versucht Kill Bot immer ein unattraktives Ziel zu sein, indem er sich selbst abschirmt, wenn er angegriffen wird. Kill Bot macht sich unter den schwachen, pazifistischen Bots hier ziemlich gut (man kann seine Verachtung für sie spüren).
quelle
o.attack
die Angriffsstufe und nicht der Schaden istFarmHeal Bot
Gegabelt von @Anonymous 'JustFarm bot
quelle
Unzerstörbar
Eine Modifikation des Draco18-Bots mit Schildern (effektiver gegen andere Bots)
quelle