Hintergrund
Hex ist ein abstraktes Strategiespiel für zwei Spieler, das auf einer K×K
Raute aus sechseckigen Kacheln gespielt wird. Zwei gegenüberliegende Seiten der Raute sind weiß gefärbt, und die anderen beiden schwarz, und die beiden Spieler, schwarz und weiß, wechseln sich ab, indem sie ein Zeichen ihrer Farbe auf ein unbesetztes Plättchen legen. Der Spieler, der es zuerst schafft, einen Pfad zwischen den gegenüberliegenden Seiten seiner Farbe zu konstruieren, ist der Gewinner. Es ist bekannt, dass das Spiel nicht unentschieden enden kann und dass der erste Spieler unabhängig von der Brettgröße eine Gewinnstrategie hat (Details finden Sie auf der Wikipedia-Seite).
Die Aufgabe
Bei dieser Herausforderung legen wir die Kartengröße fest K = 4
und stellen die Karte als das folgende Raster dar. Die dicken Linien kennzeichnen benachbarte Kacheln.
Ihre Aufgabe ist es, eine Gewinnstrategie für den ersten Spieler zu erstellen, die Sie entweder als Schwarz oder Weiß auswählen können. Dies bedeutet, dass Ihr Spiel unabhängig von den legalen Bewegungen des gegnerischen Spielers zu einem Sieg führen muss. Ihre Eingabe ist eine Spielposition (die Anordnung der Token auf dem Brett), und Ihre Ausgabe ist eine legale Bewegung in dem unten angegebenen Format. Wenn Sie selbst eine Gewinnstrategie finden möchten, lesen Sie diesen Spoiler nicht:
Umriss einer möglichen Gewinnstrategie, vorausgesetzt, Weiß steht an erster Stelle. Wählen Sie zuerst 5 aus. Wenn Sie danach einen Pfad von 5 zur unteren Reihe haben ODER Schwarz an einem beliebigen Punkt 0 oder 1 auswählt, wählen Sie die freie 0 oder 1 aus. Wenn Schwarz 9 oder 13 auswählt, wählen Sie 10 und dann welche von 14 oder 15 frei ist. Wenn Schwarz nicht 9, 13 oder 14 auswählt, wählen Sie 9 und als nächstes, was auch immer von 13 oder 14 frei ist. Wenn Schwarz 14 auswählt, antworten Sie mit 15. Wählen Sie anschließend 10 aus, wenn es frei ist. Wenn Schwarz 10 auswählt, antworten Sie mit 11. Wenn Schwarz dann 6 auswählt, antworten Sie mit 7 und als nächstes, je nachdem, welcher von 2 oder 3 frei ist. Wenn Schwarz nicht 6 auswählt, wählen Sie es aus, sodass Sie einen Pfad von 5 zur unteren Reihe haben.
Ein- und Ausgabe
Ihre Eingabe besteht aus einer Zeichenfolge mit 16 Zeichen WBE
, die für Weiß, Schwarz und Leer steht. Sie repräsentieren die Kacheln der Tafel, wie oben aufgezählt. Sie können die Eingabemethode (die auch Ihre Ausgabemethode bestimmt) wie folgt auswählen:
- Eingabe von STDIN, Ausgabe von STDOUT.
- Eingabe als ein Befehlszeilenargument, Ausgabe an STDOUT.
- Eingabe als 16 einstellige Befehlszeilenargumente, Ausgabe an STDOUT.
- Eingabe als Argument der benannten Funktion, Ausgabe als Rückgabewert.
Ihre Ausgabe stellt das Plättchen dar, auf das Sie Ihren nächsten Spielstein legen, da Sie an der Reihe sind, sich zu bewegen. Sie können aus folgenden Ausgabeformaten wählen:
- Ein auf Null basierender Index (wie im obigen Bild verwendet).
- Ein einbasierter Index.
- Die Eingabezeichenfolge mit einer
E
ersetzt durch die vonW
oderB
Sie wählten für Ihren Player.
Regeln
Ihre Strategie muss deterministisch sein. Sie müssen mit Ihrer Strategie nicht richtig mit Spielpositionen umgehen, die vom leeren Brett aus nicht erreichbar sind, oder mit Positionen, die für einen der beiden Spieler bereits gewonnen haben, und Sie können darauf abstürzen. Umgekehrt müssen Sie auf Boards, die mit Ihrer Strategie erreichbar sind, einen legalen Schritt zurückgeben.
Dies ist Code-Golf, also gewinnt die niedrigste Byteanzahl. Standardlücken sind nicht zulässig.
Testen
Ich habe einen Python 3-Controller zum Überprüfen von Einträgen geschrieben, da es äußerst mühsam wäre, dies von Hand zu tun. Sie finden es hier . Es unterstützt die ersten drei Eingabeformate und Python 3-Funktionen (Funktionen in anderen Sprachen müssen in Programme eingeschlossen werden), alle drei Ausgabeformate und beide Player. Wenn eine Strategie nicht gewinnt, wird ein verlorenes Spiel ausgegeben, das Sie gefunden haben, sodass Sie Ihr Programm optimieren können.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
Ich hätte schon vor langer Zeit gewinnen sollen, oder irre ich mich?