Grundregeln (anders als meine)
Geschichte
Es ist das Jahr 4579, Menschen haben jetzt 2 Hände mit je 1001 Fingern. Essstäbchen basieren auf Punkten. Und @Dennis hat mehr Wiederholungen als @Martin ... Von Hand gezeichnete rote Kreise werden jetzt herabgestuft ... Jon Skeet hat auf jeder SE-Site 2 Billionen Wiederholungen erzielt ... Ja, beängstigend, ich weiß
Chopsticks ist ein Handspiel, das gelöst wurde. Um das zu umgehen, habe ich es mutiert erstellt. Ich habe die Anzahl der Finger erhöht.
Spielregeln
So wird das gespielt
Jeder beginnt mit 2 Händen. Jede Hand hat 1001 Finger. Jede Hand beginnt mit 1 (einem) Finger auf jeder Hand. Während deines Zuges kannst du die Hand des anderen Spielers "schlagen". Zum Schlagen wählst du 1 deiner Hände zum Schlagen und 1 ihrer Hände zum Schlagen. Die Hand, die getroffen wurde, hat jetzt die Anzahl der Finger, die sie zuerst hatten, UND die Anzahl der Finger, die Sie auf der Hand hatten, mit der Sie geschlagen haben.
EX
P1: 1,1
P2: 1,1
. P1[0]
Treffer P2[1]
. Jetzt sind es die Finger P1:1,1
P2:1,2
. Jetzt P2[1]
trifft p1[0]
. Die Finger sind jetzt P1: 3,1
P2 1,2
.
Wenn eine Hand 1001 Finger oder mehr hat, ist diese Hand aus. Dann kann ein Spieler, der eine Hand ausgeteilt hat (für seinen Zug), "splitten". Teilen ist, wenn Sie die Hand nehmen, die sich in der Hand befindet, die Anzahl der Finger halbieren (aufrunden) und diese Finger der anderen Hand geben, die sie wieder in die Hand nimmt.
EX
P1: 1000,2
P2 7,7
. P2[0]
Treffer P1[0]
. Punktzahl ist P1: 0,2
P2 1,1
. P1[1]
teilt sich für seinen Zug und die Punktzahl ist P1: 1,1
und P2 7,7
.
Das Spiel endet, wenn ein Spieler beide Hände ausgeteilt hat. Die Punkte werden nach der Anzahl der Finger des Gewinners gewertet. Mehr Punkte = besser. Der Verlierer erhält keine Punkte.
Es gibt andere Regeln, die verwendet werden, aber diese werden hier verwendet.
Jeder spielt jeder (Round Robin)
Endspiel
Zählen Sie Ihre Punkte aus jeder Runde, die Sie gewinnen, zusammen. Dann durchschnittlich alle Punkte. Teilen Sie Ihre Gesamtsumme durch die Durchschnittspunkte und erhalten Sie Ihre endgültige Punktzahl. Die meisten Punkte gewinnen.
Aktuelle Regeln
Bitte versuchen Sie nicht , das Spiel zu lösen. Ich muss es tatsächlich ausführen können: P
Stellen Sie sicher, dass der Bot schnell laufen kann. Mit der Länge der Runden dauert dies eine Weile
Alle in Ihrem Programm benötigten Bibliotheken müssen sich in der Standard-Python-Bibliothek befinden. Listen Sie auch die Dateien auf, die Sie importieren möchten. Die Importe werden nur der grundlegende Import sein (für Mathematik I tun: import math
)
Die Antworten müssen in Python 3.x funktionieren
Handler
Ihr Bot wird eine eigene Python 3-Datei mit einer play
Funktion sein.
play
Es werden zwei Listen mit jeweils zwei Nummern übergeben. Diese Zahl gibt an, wie viele Finger sich auf jeder Hand befinden. Die erste Liste ist Ihre eigene Hand.
Wenn Sie die Hand des anderen Spielers treffen möchten, geben Sie eine Liste mit zwei Bits zurück. Das erste Bit ist der Index der Hand, die Sie zum Schlagen verwenden ( 0
für die erste, 1
für die letzte), und das zweite Bit ist der Index der Hand, die Sie auf den Gegner schlagen.
Wenn Sie sich für eine Aufteilung entscheiden, geben Sie einen anderen Wahrheitswert zurück.
Tada!
Die Steuerung finden Sie hier . Speichern Sie jeden Bot in einer eigenen Datei und listen Sie den Dateinamen jedes Bots (ohne .py
) in auf botnames
.
Schlussbemerkung:
Sie und der andere Bot wechseln sich zuerst ab. Wenn das Spiel nicht in 100.000 (einhunderttausend) Runden endet, wird das Spiel beendet und keiner der beiden Bots gewinnt.
Der Controller ist nicht gegen ewige Bewegungen geschützt, aber unnötiger Overhead wird stark verpönt.
quelle
My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!
Was, also machen wir die Berechnungen für den KoTH?Antworten:
CodingAndAlgorithms
Diese Antwort verwendet tatsächlich Codierung und Algorithmen, im Gegensatz zu den anderen bisher! reference: imgur ( übertrifft auch alle vorher geposteten Antworten)
quelle
CautionBot
AchtungBot möchte nicht zu viel Ärger verursachen, also schlägt es mit seiner kleineren Hand auf die kleinere Hand des Gegners, wenn es beide Hände hat, und teilt sich ansonsten. CautionBot ist jedoch kein Dummkopf. Wenn es also die Hand eines Gegners herausnehmen kann, ohne den nächsten Zug sofort zu verlieren, wird es dies anstelle seines normalen Zuges tun.
quelle
Equalizer
Wenn dem Equalizer eine Hand fehlt, wird sie geteilt. Andernfalls schlägt er die kleinste Hand seines Gegners mit seiner eigenen größten Hand.
quelle
Aggressor
Ein weiterer Starterbot, Aggressor, schlägt die größere Hand des Gegners mit der größeren seiner eigenen Hände, wenn beide Hände nicht leer sind. ansonsten spaltet es sich.
quelle
RandomBot
Hier ist ein Bot, der einen zufälligen Treffer macht, wenn beide Hände nicht leer sind. ansonsten spaltet sich.
Golfen, weil warum nicht: 3
quelle
Error
Ja, das ist der Name des Bots.
Ich bin dazu gekommen, indem ich mit den anderen Bots getestet habe. In meinen Simulationen ist es jedoch durchweg der vorletzte. Also mache ich irgendwann einen anderen Bot.
Bearbeiten: Ich kann anscheinend keinen Bot schreiben, der CautionBot schlägt, und meine zusätzlichen Tests scheinen anzuzeigen, dass dies der zweitbeste und nicht der zweitbeste ist.
quelle
Marathonläufer
Ich habe den von "HyperNeutrino" bereitgestellten Aggressor-Code angepasst, um einfach die kleinere der beiden Hände des Gegners mit der kleineren der Hände zu treffen. Es ist natürlich eine sehr dumme Strategie, aber ich kann es nicht ablehnen, ganz oben auf einem Chart zu stehen! (Auch wenn dieses Diagramm Verluste sein würde)
Ich bin mir nicht sicher, ob dieser Code fehlerfrei ausgeführt wird, da ich ihn aufgrund der Arbeit nicht testen konnte. Es sollte jedoch einwandfrei funktionieren.
quelle