In dieser Form des Spiels Tic-Tac-Chec besteht das Ziel darin, Schachfiguren zu bewegen, um vier in einer Reihe zu erhalten. Ihr Ziel hier ist es herauszufinden, ob eine Position einen Gewinnzug hat.
Regeln
Die Regeln sind ähnlich, aber nicht identisch mit denen von Tic-Tac-Chec.
Das Brett ist 4 mal 4 Quadrate. Jeder Spieler hat einen Turm, einen Bischof, einen Ritter und eine Königin. In Ihrem Zug haben Sie zwei Möglichkeiten. Sie können eine Ihrer Figuren, die sich bereits auf dem Brett befindet, nach den Standardschachregeln bewegen. Oder Sie können ein Stück, das noch nicht auf dem Brett liegt, an einem freien Platz platzieren.
Wenn Sie eine vorhandene Figur auf die Figur eines Gegners verschieben, wird deren Figur vom Brett genommen und zu ihm zurückgebracht. Sie dürfen jedoch keine neue Figur auf die Figur eines Gegners legen.
Sobald ein Spieler alle Teile in einer Reihe (oder Spalte oder Diagonale) hat, gewinnt er.
Herausforderung
Schreiben Sie ein vollständiges Programm, das ein Board von STDIN akzeptiert und ausgibt, ob der weiße Spieler in der nächsten Runde gewinnen kann.
Eingang
Vier Zeichenfolgen mit jeweils 4 Zeichen. Jeder Charakter ist entweder ein Leerzeichen oder eine Schachfigur. Es werden nur Türme, Bischöfe, Ritter und Königinnen verwendet, von denen höchstens einer (pro Farbe) erscheinen darf. Keiner der Spieler hat bereits einen Vierer in Folge.
Sie können wählen, ob Sie die Unicode-Symbole für die Schachfiguren oder Buchstaben als Eingabe akzeptieren möchten. Wenn Sie Buchstaben auswählen, werden RBKQ
weiße und rbkq
schwarze Teile dargestellt.
Ausgabe
Wenn der weiße Spieler in der nächsten Runde gewinnen kann, geben Sie true
oder aus 1
. Ansonsten Ausgabe false
oder 0
.
Programm
Wählen Sie eine Zahl X. Ihr Programm darf höchstens X verschiedene Zeichen enthalten, und kein Zeichen darf mehr als X Mal erscheinen.
Gewinnen
Das niedrigste X gewinnt. Bei einem Unentschieden gewinnen die wenigsten Charaktere.
Beispiele
In diesen Beispielen wird davon ausgegangen, dass die Eingabe Buchstaben verwendet, um die Teile darzustellen.
rkb
RB Q
true - the white player can place the knight to complete the bottom row.
-----------------------------------
rk
RBbQ
false - the black bishop prevents the white knight from completing the row.
-----------------------------------
rk
K
RBbQ
true - the white knight can capture the black bishop and complete the row.
-----------------------------------
rkRB
Qb
K
true - the white rook can move down one to complete the diagonal.
Antworten:
C, 53 verschiedene Zeichen
Dies verwendet
"#%&()*+,-./01234569;<=>BKQR[\]acdefghilmnoprstu{|}
Raum und Zeilenumbruch, verteilt wie folgt: 24 ×\n
, 33 ×, 20 ×
"
, 2 ×#
, 3 ×%
, 16 ×&
, 46 ×(
, 46 ×)
, 13 ×*
, 12 ×+
, 35 ×,
, 10 ×-
, 2 ×.
, 2 ×/
, 18 ×0
, 9 ×1
, 4 ×2
, 4 ×3
, 4 ×4
, 4 ×5
, 3 ×6
, 3 ×9
, 34 ×;
, 6 ×<
, 46 ×=
, 2 ×>
, 2 ×B
, 2 ×K
, 3 ×Q
, 2 ×R
8 ×[
, 1 ×\
, 8 ×]
, 39 ×a
, 23 ×c
, 5 ×d
, 19 ×e
, 15 ×f
, 1 ×g
, 22 ×h
, 36 ×i
, 5 ×l
, 1 ×m
, 35 ×n
, 9 ×o
33 ×p
, 44 ×r
, 20 ×s
, 43 ×t
, 15 ×u
, 8 ×{
, 14 ×|
, 8 ×}
.Erläuterung
Es funktioniert, indem nach einer Zeile, Spalte oder Diagonale gesucht wird, die drei der weißen Teile enthält.
a
zeigt auf die Zielposition (enthält noch kein weißes Stück). Dann wird das fehlende Teil (o
) identifiziert - es ist das, das wir nicht aus der Zeichenfolge entfernt haben,h
als wir es sahen.Wenn sich das Stück nicht auf dem Brett befindet, muss es in der Hand sein und kann nur in ein Feld gespielt werden. Andernfalls (wenn wir es auf dem Brett gefunden haben) muss es sich in einer Position befinden, in der es sich in das Zielfeld bewegen kann. Da Bewegungen reversibel sind, tauschen wir sie bei Bedarf aus, damit
a < p
.Wir testen zuerst Ritterbewegungen - es gibt vier legale Abwärtsbewegungen, und wir vermeiden es, uns um den linken / rechten Rand des Bretts zu wickeln, indem wir die Anzahl der Zeilenumbrüche überprüfen, die wir passieren.
Danach testen wir Turmbewegungen und dann Bischofsbewegungen mit einem ähnlichen Algorithmus (und eine Königin kann jede dieser Bewegungen verwenden).
Testprogramm
Zählprogramm (in C ++)
quelle
6+3
für9
Und16+3
für19