チェスメニューのサムネイル
棋譜の作成 Perl編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

  • はじめに


  • ここでは、棋譜の作成をやっていきます。

    ひとつ前の問題「盤面の記録」では、棋譜を作るための情報を整理しました。まず、棋譜では移動したコマが何かを 1 文字で表します。キングならば K、クイーンならば Q、ナイトならば N、ビショップならば B、ルークならば R、ポーンならば P です。しかし、ポーンの場合は省略されます。そのあとに移動後の場所を付け足すことにより基本的な棋譜の表記になります。

    例えば、BKd6 に移動したら Kd6WP が a3 に移動した場合は a3 になります。

    ここに、コマを取ったか、チェックか、チェックメイトかの情報を足していきます。コマを取った場合、コマの記号と場所の記号の間に x を足します。チェック、チェックメイトの場合には、それぞれ最後に +#を足します。ポーンの場合、コマを取った場合には一番前に移動前の列の情報を付け足します

    例えば、BRb8 にコマを取りながら移動し、チェックした場合には、Rxb8+WPg5 から h6 に移動しながらコマを取りチェックメイトした場合は gxh6# となります。

    ポーンの場合にはプロモーションというルールがありますが、プロモーションを行った場合には番地の後に = をつけてどのコマになったかを記します。

    例えば、BPa1 に移動し、クイーンになりチェックした場合は a1=Q+ となります。

    移動後の場所に複数のコマが移動可能な時、移動前の番地を付け足すことにより区別します。列だけで区別できる場合は列の情報のみを、そうでなく行で区別できる場合は行の情報のみを、それでも区別不可能な場合には移動前の番地を付け足します。

    例えば、BRa6h6 にいて、h6 にいる BRa6 にいる BR も移動可能な d6 にコマを取りながら移動する場合、Rhxd6 となります。

    最後にキングサイドキャスリングの場合にはO-O、クイーンサイドキャスリングの場合にはO-O-Oと表記します。

    これらの表記をひとつ前の問題「盤面の記録」で作成した情報をもとに作成してみましょう。

    では、実際にやってみましょう。


  • 問題


  • 駒が置かれた N 個の盤面 L_1, L_2, ..., L_N が与えられます。L_1 は初期盤面であり、i (1 ≦ i ≦ N - 1) 番目の手は L_i から L_{i + 1} に変異させたものとなります。棋譜を作成してください。

    入力される値

    N
    L_1
    L_2
    ...
    L_N


    入力はまず整数 N が与えられ、そのあと N 個の盤面が順番に与えられます。L_i (1 ≦ i ≦ N) は以下の形をしています。

    L_i_{a8} L_i_{b8} ... L_i_{h8}
    L_i_{a7} L_i_{b7} ... L_i_{h7}
    ...
    L_i_{a1} L_i_{b1} ... L_i_{h1}

    1 行目には 1 つの整数 N が与えられます。

    8 × (i - 1) + j + 1 (1 ≦ i ≦ N, 1 ≦ j ≦ 8) 行目には n = 9 - j としたとき、8 つの文字列 L_i_{an},L_i_{bn},L_i_{cn},L_i_{dn},L_i_{en},L_i_{fn},L_i_{gn},L_i_{hn} が与えられます。

    入力は 8 × N + 1 行となり、末尾に改行が 1 つ入ります。


    入力値最終行の末尾に改行が1つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

    答えを、N - 1 行で出力してください。

    i (1 ≦ i ≦ N - 1) 行目には i 番目の手を棋譜の表記で出力してください。

    条件

    すべてのテストケースにおいて、以下の条件をみたします。
    ・2 ≦ N ≦ 500

    ・L_i の要素は 1 文字目が B,W のいずれかで、2 文字目が R,B,N,P,Q,K のいずれかである 2 文字の文字列か -- (1 ≦ i ≦ N)

    ・L_i から 1 手動かすことにより L_{i + 1} になる (1 ≦ i ≦ N)

    ・L_1 は初期盤面

    入力例1

    11
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP BP BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    WP WP WP WP WP WP WP WP
    WR WN WB WQ WK WB WN WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP BP BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- WN -- --
    WP WP WP WP WP WP WP WP
    WR WN WB WQ WK WB -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- BP --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- WN -- --
    WP WP WP WP WP WP WP WP
    WR WN WB WQ WK WB -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- BP --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- WN WP --
    WP WP WP WP WP WP -- WP
    WR WN WB WQ WK WB -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- BP --
    -- -- -- -- -- WN WP --
    WP WP WP WP WP WP -- WP
    WR WN WB WQ WK WB -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- BP --
    -- -- -- -- -- WN WP WB
    WP WP WP WP WP WP -- WP
    WR WN WB WQ WK -- -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- BP WP WB
    WP WP WP WP WP WP -- WP
    WR WN WB WQ WK -- -- WR
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- BP WP WB
    WP WP WP WP WP WP -- WP
    WR WN WB WQ -- WR WK --
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- WP WB
    WP WP WP WP BP WP -- WP
    WR WN WB WQ -- WR WK --
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- WB -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- WP --
    WP WP WP WP BP WP -- WP
    WR WN WB WQ -- WR WK --
    BR BN BB BQ BK BB BN BR
    BP BP BP BP BP BP -- BP
    -- -- -- -- WB -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- -- --
    -- -- -- -- -- -- WP --
    WP WP WP WP -- WP -- WP
    WR WN WB WQ -- BR WK --

    出力例1

    Nf3
    g5
    g3
    g4
    Bh3
    gxf3
    O-O
    fxe2
    Be6
    exf1=R+

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. チェスメニュー(言語選択)
    4. 問題一覧 Perl編
    5. 棋譜の作成 Perl編
    ページの先頭へ戻る