チェスメニューのサムネイル
盤面の記録 C++編(paizaランク B 相当)

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

問題

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

  • はじめに


  • ここでは、棋譜を作るための盤面の記録の取り方をやっていきます。

    まず、棋譜を作るために必要な情報について見ていきます。どこにいるコマがどこに移動したか(キャスリングも含める)がまず情報として必要です。そして、コマをとったかの情報も必要になります。また、ポーンの場合にはプロモーションというものがあり、どのコマに昇格したかも情報として必要です。そして、チェックされているか、チェックメイトであるかの情報も棋譜に記録することになります。

    ここで、今回は次のように記録していきます。

    キャスリングでない場合 : コマの種類、移動前、移動後、コマをとったか、プロモーション先、チェックであるか、チェックメイトであるか

    キャスリングの場合 : キングサイドキャスリングなら、King-Side-Castling、クイーンサイドキャスリングなら、Queen-Side-Castling

    コマをとったか、チェックであるか、チェックメイトであるかは True、False で管理します。プロモーション先は、プロモーションが行われた際にはコマの種類、そうでない場合は -- とします。

    例えば、WRa4 から h4 に移動し、相手のコマをとり、チェックした場合は、

    WR a4 h4 True -- True False

    WPa7 から a8 に移動し、WQ に昇格した場合は、

    WP a7 a8 False WQ False False

    と出力します。

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


  • 問題


  • 駒が置かれた 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

    WN g1 f3 False -- False False
    BP g7 g5 False -- False False
    WP g2 g3 False -- False False
    BP g5 g4 False -- False False
    WB f1 h3 False -- False False
    BP g4 f3 True -- False False
    King-Side-Castling
    BP f3 e2 True -- False False
    WB h3 e6 False -- False False
    BP e2 f1 True BR True False

    問題一覧へ戻る

    1. paizaトップ
    2. レベルアップ問題集
    3. チェスメニュー(言語選択)
    4. 問題一覧 C++編
    5. 盤面の記録 C++編
    ページの先頭へ戻る