代数表記を記述表記に変換する


8

ショート氏はチェスをするのが好きです。ショート氏もとても伝統的な人です。したがって、ショート氏は現代のチェスで代数表記を使用する最近の傾向に悩まされており、彼は彼の父親と彼の前の父親の父のように、むしろ記述表記を使用したいと思います。

注意

この課題を単純化するために、私は曖昧さを処理しないことを選択しました(2つのピースが同じ正方形に移動したり、同じピースをキャプチャしたりできる場合など)。また、エンパッサン、プロモーション、Castlingも扱いません。

初心者のための代数表記

  • ボードの正方形にはa1、左下からh8右上に番号が付けられています。文字はファイル(列)を表し、数字はランク(行)を表します。白のキングはゲームの最初の広場に置かれe1ます。
  • 移動は、移動した駒+移動先の正方形で構成されます。たとえば、移動先のキングe2はになりますKe2
  • 移動した駒がポーンの場合、駒文字は省略されます。たとえば、ポーンの最初の移動先e4はと表記されe4ます。
  • 移動がキャプチャの場合はx、ピースと移動先の正方形の間に文字が挿入されます。たとえば、で捕らえている女王f7はとして注釈が付けられQxf7ます。
  • キャプチャーピースがポーンである場合、それは斜めに移動するため、ポーンの元のファイルが記法で記録されます。たとえば、Pawn at c4がで駒をキャプチャするとd5、その動きはとして注釈が付けられcxd5ます。
  • ピースシンボルはK、キング、Qクイーン、Bビショップ、Nナイト、Rルークのシンボルです。ポーンにはシンボルがありません。
  • その他の注釈には+、チェック#用とチェックメイト用があります。f7に移動してチェックを行うポーンはf7+です。スペースの不足に注意してください。

初心者向けの説明表記

  • ファイルは、その上から始まる部分によって記述されます。たとえばe、代数でのファイルはKingファイル、または略してになりKます。他のファイルはそれらの側でマークされ、次にピースです。したがって、file hはKing's Rookのファイル、またはKRです。
  • ランクは、移動するプレーヤーの視点から番号が付けられます。代数的で4番目のランクは、白の4番目のランクですが、黒の5番目のランクです。
  • したがって、正方形e4K4白のプレーヤーK5用と黒のプレーヤー用です。四角f7KB7白のプレーヤーKB2用と黒のプレーヤー用です。
  • 動きは、駒の動き、ダッシュ、ターゲットの四角形で注釈されます。したがって、移動先のポーンK4P-K4です。移動する女王KR5Q-KR5です。
  • キャプチャーには、キャプチャーピース、次にx、キャプチャーピースの順に注釈が付けられます。したがって、ポーンを捕獲する司教はBxPです。通常、どの Pawnがキャプチャされているかをマークする必要がありますが、簡単にするためにこれは無視してください。
  • ピースシンボルはK、キング、Qクイーン、Bビショップ、Ktナイト(別のシンボルに注意)、Rルーク、Pポーン用です。
  • 他の注釈にはch、チェックmate用とチェックメイト用があります。移動しKB7てチェックを行うポーンはP-KB7 chです。スペースに注意してください。

入力

スペースで区切られた代数表記の文字列が移動します。移動番号はありません。たとえば、フールの仲間は次のようになります。

f3 e5 g4 Qh4#

または、同じWikipediaページからのゲームTeed vs Delmar:

d4 f5 Bg5 h6 Bf4 g5 Bg3 f4 e3 h5 Bd3 Rh6 Qxh5+ Rxh5 Bg6#

不滅のゲーム

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#

入力は常に有効なゲームであると想定できます。すべての移動は正しい順序で行われ、無関係なデータはありません。明確化を含む動きはありません

たとえば、エバーグリーンゲームは、当然ながら有効なゲームであるにもかかわらず、19番手のために入力されませんRad1

すべての入力ムーブリストが開始位置から始まると想定することもできます。

出力

記述表記の同様の形式のムーブリスト。

たとえば、フールの仲間:

P-KB3 P-K4 P-KKt4 Q-KR5 mate

ティーvsデルマー:

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

不滅のゲーム:

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

これは、最も単純な記述表記ではありません。移動先のKnightファイルを指定する必要がない場合があるためです(たとえば、移動が不可能なため、このQ-KKt4ように記述できます)。移動があいまいです(ポーン:にする必要があります) 、しかしショート氏はそれについてあまり気にしません。Q-Kt4Q-QKt4BxPBxQKtP

あなたはこれらをあなたのテストケースと考えるかもしれません。

注:これらは手動で作成しました。重大な間違いを見つけた場合はお知らせください。

ルールとスコアリング

  • 標準規則が適用されます:stdoutまたは関数への出力を伴うプログラム。stderrには何もありません。標準の抜け穴は禁止されています。
  • コードをテストできるサイトにリンクしてください。
  • コードゴルフ:最短のコードが勝ちます。

結論として

これは私の最初の挑戦なので、おそらくいくつかのわいせつな間違いを犯しました。質問に対するフィードバック(コメントで明らかに)は高く評価されます。


3
課題の問題を解決し、同時に他の問題なしにフィードバックを得る時間が本当に必要な場合は、サンドボックスに提案として投稿できます。
R. Kap

素晴らしい最初の課題
edc65

私は記述表記はe2-e4とNg1-f3(それぞれ開始位置からのe4とNf3の場合)になると
思いました

回答:


2

バッチ、554バイト

@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%

s出力文字列です。m現在の移動です(移動はコマンドラインパラメーターとして使用されます)。cであるchmateのフラグを。p現在の作品です。ピースがない場合(つまり、小文字a-h)、P置換されます。(Nto Kt置換は後でバイトを節約するために行われます。)次に宛先列が辞書で検索されます。ただし、移動が実際にキャプチャである場合、移動先はxそのマスの前の駒が続きます。どちらの方法でも、移動先の正方形は、移動したばかりの部分に設定されます。移動は、パラメータがなくなるまで蓄積され、その後それらが出力されます。

変数a1... h8は、最後に表示された部分を格納するために使用されます。.接頭辞があるため、私は戻って行を初期化する方法であり、で開始することが許可されていない限り、Batchで2つの変数を一度にループするのは困難です.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.