Konvertieren Sie die algebraische Notation in die beschreibende Notation

8

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 a1unten links bis h8oben 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 platziert e1.
  • Ein Zug besteht aus dem Teil, der sich bewegt hat + dem Zielfeld. Zum Beispiel wäre ein König, e2der umzieht Ke2.
  • Wenn das bewegte Stück ein Bauer ist, wird der Stückbuchstabe weggelassen. Zum Beispiel wird der Startzug Bauer zu e4geschrieben als e4.
  • Wenn es sich bei dem Zug um eine Erfassung handelt, wird der xBuchstabe zwischen dem Stück und dem Zielquadrat eingefügt. Zum Beispiel wird eine Königin, die bei erfasst, f7als kommentiert Qxf7.
  • 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 c4eine Figur bei erfasst d5, wird der Zug als kommentiert cxd5.
  • Stücksymbole sind Kfür König, Qfür Königin, Bfür Bischof, Nfür Ritter und Rfü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, ist f7+. Platzmangel beachten.

Beschreibende Notation für Uneingeweihte

  • Die Dateien werden durch das Stück beschrieben, das darauf beginnt. Zum Beispiel, was das wäre eDatei in Algebraische, wird die König - Datei, oder kurz, K. Die anderen Dateien sind an ihrer Seite markiert, dann das Stück. Die Datei hist also die Datei des King's Rook oder KR.
  • 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 e4ist K4für den weißen Spieler und K5für den schwarzen Spieler. Das Quadrat f7ist KB7für den weißen Spieler und KB2fü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, K4ist also P-K4. Eine Königin bewegt zu KR5ist Q-KR5.
  • Eine Erfassung wird mit dem Erfassungsstück und dann xmit dem erfassten Teil kommentiert . Daher ist ein Bischof, der einen Bauern gefangen nimmt BxP. Normalerweise müssen Sie markieren, welcher Bauer gefangen genommen wird, dies jedoch der Einfachheit halber ignorieren.
  • Stücksymbole sind Kfür König, Qfür Königin, Bfür Bischof, Ktfür Ritter (beachten Sie das andere Symbol), Rfür Turm und Pfür Bauer.
  • Andere Anmerkungen umfassen chfür Scheck und matefür Schachmatt. Ein Bauer, der sich bewegt KB7und einen Scheck gibt, ist P-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-KKt4könnte geschrieben werden, Q-Kt4da die Verschiebung Q-QKt4unmöglich ist). Die Verschiebung BxPist 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.

Asibahi
quelle
3
Wenn Sie wirklich Zeit haben möchten, um die Probleme Ihrer Herausforderung zu lösen und gleichzeitig ohne weitere Probleme Feedback zu erhalten, können Sie es als Vorschlag in die Sandbox stellen .
R. Kap
Große erste Herausforderung
edc65
Ich dachte, die beschreibende Notation wäre e2-e4 und Ng1-f3 (für e4 bzw. Nf3 von der Startposition aus)
ericw31415

Antworten:

2

Stapel, 554 Bytes

@echo off
for %%r in (a.R b.Kt c.B d.Q e.K f.B g.Kt h.R)do set %%~nr1=%%~xr&set %%~nr8=%%~xr
for %%r in (a b c d e f g h)do set %%r2=.P&set %%r7=.P
set s=
:l
set m=%1
set c=
for %%r in (ch.+ mate.#) do if .%m:~-1%==%%~xr set c= %%~nr&set m=%m:~0,-1%
set p=%m:~0,1%
for %%r in (a b c d e f g h)do if %p%==%%r set p=P
for %%r in (QR.a QKt.b QB.c Q.d K.e KB.f KKt.g KR.h)do if .%m:~-2,1%==%%~xr set d=-%%~nr%m:~-1%
if %m:~-3,1%==x call set d=x%%%m:~-2%:~1%%
set %m:~-2%=.%p:N=Kt%
set s=%s% %p:N=Kt%%d%%c%
shift
if not "%1"=="" goto l
echo%s%

sist die Ausgabezeichenfolge. mist die aktuelle Bewegung (Bewegungen werden als Befehlszeilenparameter verwendet). cist die choder mateFlagge. pist das aktuelle Stück. Wenn es kein Stück gibt (dh einen Kleinbuchstaben a-h), Pwird es ersetzt. (Die Nzu KtSubstitution 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, xfolgt 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... h8werden 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 ..

Neil
quelle