Mr Short spielt gerne Schach. Herr Short ist auch ein sehr traditioneller Mann. Daher ist Herr Short beunruhigt über den jüngsten Trend, die algebraische Notation im modernen Schach zu verwenden, und er würde lieber die beschreibende Notation verwenden , wie sein Vater und der Vater seines Vaters vor ihm.
Hinweis
Um diese Herausforderung zu vereinfachen, habe ich mich entschieden, mich nicht mit Disambiguatien zu befassen (wie in, wenn zwei Teile sich auf dasselbe Feld bewegen oder dasselbe Teil erfassen können). Es gibt auch keinen Umgang mit en passant, Beförderung oder Castling.
Algebraische Notation für Uneingeweihte
- Die Brettquadrate sind von
a1
unten links bish8
oben rechts nummeriert . Die Buchstaben repräsentieren die Dateien (Spalten), während die Zahlen die Ränge (Zeilen) repräsentieren. Der weiße König wird zu Beginn des Spiels auf dem Platz platzierte1
. - Ein Zug besteht aus dem Teil, der sich bewegt hat + dem Zielfeld. Zum Beispiel wäre ein König,
e2
der umziehtKe2
. - Wenn das bewegte Stück ein Bauer ist, wird der Stückbuchstabe weggelassen. Zum Beispiel wird der Startzug Bauer zu
e4
geschrieben alse4
. - Wenn es sich bei dem Zug um eine Erfassung handelt, wird der
x
Buchstabe zwischen dem Stück und dem Zielquadrat eingefügt. Zum Beispiel wird eine Königin, die bei erfasst,f7
als kommentiertQxf7
. - Wenn das Erfassungsstück ein Bauer ist, zeichnet die Notation die Datei auf, aus der der Bauer stammt, da sie sich diagonal bewegt. Wenn der Bauer bei beispielsweise
c4
eine Figur bei erfasstd5
, wird der Zug als kommentiertcxd5
. - Stücksymbole sind
K
für König,Q
für Königin,B
für Bischof,N
für Ritter undR
für Turm. Bauern haben keine Symbole. - Andere Anmerkungen umfassen
+
für Scheck und#
für Schachmatt. Ein Bauer, der sich zu f7 bewegt und einen Scheck gibt, istf7+
. Platzmangel beachten.
Beschreibende Notation für Uneingeweihte
- Die Dateien werden durch das Stück beschrieben, das darauf beginnt. Zum Beispiel, was das wäre
e
Datei in Algebraische, wird die König - Datei, oder kurz,K
. Die anderen Dateien sind an ihrer Seite markiert, dann das Stück. Die Dateih
ist also die Datei des King's Rook oderKR
. - Die Ränge sind aus Sicht des sich bewegenden Spielers nummeriert. Was in der Algebraisch der vierte Rang wäre, ist der vierte Rang für Weiß, aber der fünfte Rang für Schwarz.
- Daraus folgt , dass der Platz
e4
istK4
für den weißen Spieler undK5
für den schwarzen Spieler. Das Quadratf7
istKB7
für den weißen Spieler undKB2
für den schwarzen Spieler. - Eine Bewegung wird durch die Bewegung des Stücks, dann durch einen Strich und dann durch das Zielquadrat kommentiert. Ein Bauer, der sich bewegt,
K4
ist alsoP-K4
. Eine Königin bewegt zuKR5
istQ-KR5
. - Eine Erfassung wird mit dem Erfassungsstück und dann
x
mit dem erfassten Teil kommentiert . Daher ist ein Bischof, der einen Bauern gefangen nimmtBxP
. Normalerweise müssen Sie markieren, welcher Bauer gefangen genommen wird, dies jedoch der Einfachheit halber ignorieren. - Stücksymbole sind
K
für König,Q
für Königin,B
für Bischof,Kt
für Ritter (beachten Sie das andere Symbol),R
für Turm undP
für Bauer. - Andere Anmerkungen umfassen
ch
für Scheck undmate
für Schachmatt. Ein Bauer, der sich bewegtKB7
und einen Scheck gibt, istP-KB7 ch
. Beachten Sie den Platz.
Eingang
Eine Reihe algebraischer Notationsbewegungen wird durch Leerzeichen abgegrenzt. Es gibt keine Zugnummern. Zum Beispiel geht der Kumpel des Narren so:
f3 e5 g4 Qh4#
Oder das Spiel Teed vs Delmar von derselben Wikipedia-Seite:
d4 f5 Bg5 h6 Bf4 g5 Bg3 f4 e3 h5 Bd3 Rh6 Qxh5+ Rxh5 Bg6#
Das unsterbliche Spiel .
e4 e5 f4 exf4 Bc4 Qh4+ Kf1 b5 Bxb5 Nf6 Nf3 Qh6 d3 Nh5 Nh4 Qg5 Nf5 c6 g4 Nf6 Rg1 cxb5 h4 Qg6 h5 Qg5 Qf3 Ng8 Bxf4 Qf6 Nc3 Bc5 Nd5 Qxb2 Bd6 Bxg1 e5 Qxa1+ Ke2 Na6 Nxg7+ Kd8 Qf6+ Nxf6 Be7#
Sie können davon ausgehen, dass die Eingabe immer ein gültiges Spiel ist. Alle Bewegungen sind in der richtigen Reihenfolge und es sind keine fremden Daten vorhanden. Keine Bewegungen beinhalten eine Begriffsklärung .
Zum Beispiel wird das Evergreen-Spiel, obwohl es offensichtlich ein gültiges Spiel ist, aufgrund des 19. Zuges nicht eingegeben Rad1
.
Sie können auch davon ausgehen, dass alle Eingabebewegungslisten an der Startposition beginnen.
Ausgabe
Eine Verschiebungsliste mit einem ähnlichen Format in beschreibender Notation.
Zum Beispiel der Kumpel des Narren:
P-KB3 P-K4 P-KKt4 Q-KR5 mate
Teed gegen Delmar:
P-Q4 P-KB4 B-KKt5 P-KR3 B-KB4 P-KKt4 B-KKt3 P-KB5 P-K3 P-KR4 B-Q3 R-KR3 QxP ch RxQ B-KKt6 mate
Das unsterbliche Spiel:
P-K4 P-K4 P-KB4 PxP B-QB4 Q-KR5 ch K-KB1 P-QKt4 BxP Kt-KB3 Kt-KB3 Q-KR3 P-Q3 Kt-KR4 Kt-KR4 Q-KKt4 Kt-KB5 P-QB3 P-KKt4 Kt-KB4 R-KKt1 PxB P-KR4 Q-KKt3 P-KR5 Q-KKt4 Q-KB3 Kt-KKt1 BxP Q-KB3 Kt-QB3 B-QB4 Kt-Q5 QxP B-Q6 BxR P-K5 QxR ch K-K2 Kt-QR3 KtxP ch K-Q1 Q-KB6 ch KtxQ B-K7 mate
Dies ist nicht die einfachste beschreibende Notation, die möglich ist, da Sie manchmal nicht angeben müssen, in welche Knight-Datei verschoben wurde (wie in, Q-KKt4
könnte geschrieben werden, Q-Kt4
da die Verschiebung Q-QKt4
unmöglich ist). Die Verschiebung BxP
ist mehrdeutig (welcher Bauer: sollte sein BxQKtP
). , aber Mr Short kümmert sich nicht allzu sehr darum.
Sie können diese als Ihre Testfälle betrachten.
Hinweis: Ich habe diese von Hand geschrieben. Wenn Sie offensichtliche Fehler bemerken, lassen Sie es mich bitte wissen.
Regeln und Wertung
- Es gelten Standardregeln: Programm mit Ausgabe an stdout oder Funktion. Nichts zu stderr. Standardlücken sind verboten.
- Bitte verlinken Sie auf eine Seite, auf der wir Ihren Code testen können.
- Code Golf: Der kürzeste Code gewinnt.
Abschließend
Dies ist meine erste Herausforderung, daher habe ich wahrscheinlich einige noobische Fehler gemacht. Feedback zu der Frage (in den Kommentaren natürlich) ist willkommen.
Antworten:
Stapel, 554 Bytes
s
ist die Ausgabezeichenfolge.m
ist die aktuelle Bewegung (Bewegungen werden als Befehlszeilenparameter verwendet).c
ist diech
odermate
Flagge.p
ist das aktuelle Stück. Wenn es kein Stück gibt (dh einen Kleinbuchstabena-h
),P
wird es ersetzt. (DieN
zuKt
Substitution wird später fertig Bytes zu speichern.) Die Zielspalte wird dann in einem Wörterbuch nachgeschlagen. Wenn es sich bei der Bewegung jedoch tatsächlich um eine Erfassung handelt,x
folgt auf das Ziel das zuvor auf diesem Feld befindliche Stück. In beiden Fällen wird das Zielquadrat dann auf das Stück gesetzt, das sich gerade dorthin bewegt hat. Die Bewegungen werden akkumuliert, bis keine Parameter mehr vorhanden sind, und dann werden sie gedruckt.Die Variablen
a1
...h8
werden verwendet, um das zuletzt gesehene Stück zu speichern. Das.
Präfix ist dort, weil ich die hintere Zeile initialisiere. Es ist schwierig, zwei Variablen gleichzeitig in Batch zu durchlaufen, es sei denn, ich darf eine mit a beginnen.
.quelle