チェスメニューのサムネイル
盤面カウント Erlang(Beta)編(paizaランク B 相当)

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

問題

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

  • はじめに


  • ここでは、特殊な引き分けルールについて学習していきます。

    チェスでは、同じ手番で、同じ盤面が 3 回現れると引き分けとすることが出来ます。ただし、キャスリングの権利と、アンパッサンを行える可能性も同じでなければいけません。

    この判定はそれぞれの手の後の盤面をひとつ前の問題「盤面 → 文字列」のように文字列で管理し、同じ文字列が 3 回出ていないかを管理することで判定が出来ます。キャスリングの権利とアンパッサンを行える可能性が変化した場合は、元に戻ることはないので今まで管理していた盤面の記録をリセットすることによって判定が出来ます。

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


  • 問題


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

    入力される値

    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つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

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

    同じ盤面が 3 回現れたら Yes を、そうでない場合は No を出力してください。

    条件

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

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

    ・L_1 は初期盤面

    入力例1

    3
    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

    出力例1

    No

    問題一覧へ戻る

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