1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランクレベルアップメニュー(言語選択)
  4. 問題一覧 PHP編
  5. いびつなリバーシ対戦(2人) PHP編

Aランクレベルアップメニューのアイコン
いびつなリバーシ対戦(2人) PHP編(paizaランク A 相当)

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

問題

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

A さんと B さんの 2 人でいびつなリバーシの対戦をします。
盤面・ターン数・各行動で石を置く座標についての情報が与えられます。
盤面に穴の空いているマスは '#' , 何も置かれていないマスは '.' になっています。

プレイヤーは次の操作を 1 回ずつ交互に合計 N 回繰り返します。なお、先攻は A さんです。

・ A さんは盤面のマス(Ya_i, Xa_i)に、Bさんは盤面のマス(Yb_i, Xb_i)に石を置きます。すでに相手の石が置かれている場合は相手の石を自分の石に置き換える。
・ 次に、縦横斜めに自分の石ではさんだ連続した穴の空いていないマスに自分の石をおきます。この時、既に相手の石が置かれている場合は相手の石を自分の石に置き換える。
・ 新たに置いた石によってさらに石が置けるようになった場合でもその時点で操作を終える。

操作を終えた後の盤面を出力してください。
ただし、A さんの石が置かれているマスを 'A' , B さんの石が置かれているマスを 'B' として出力してください。

なお、マスの座標系は左上端のマスの座標を ( y , x ) = ( 0 , 0 ) とし、下方向が y 座標の正の向き、右方向が x 座標の正の向きとします。

例として、灰色のマスを穴の空いているマスとしたときに、
図 1 のような盤面のとき赤いマスに A さんが石を置くと図 2 のようになり、図 3 のような盤面のとき赤いマスに B さんが石を置くと図 4 のようになります。


図1

図2

図3

図4

入力される値

H W N       
S_0
...
S_(H-1)
Ya_1 Xa_1
Yb_1 Xb_1
...
Ya_N Xa_N
Yb_N Xb_N


・ 1 行目では、盤面の行数 H , 列数 W , 各プレイヤーのターン数 N が与えられます。
・ 続く H 行のうち i 行目 (0 ≦ i < H) には、盤面の i 行目の文字をまとめた文字列 S_i が与えられ、S_i の j 文字目は、盤面の i 行目の j 列目に書かれている文字を表します。
・ 続く 2 * N 行のうち 2 * i + 1 行目 (0 ≦ i ≦ N - 1) には、i 回目の操作で A さんが石を置く座標 Y_i X_i が与えられます。
2 * i 行目 (1 ≦ i ≦ N) には、i 回目の操作で B さんが石を置く座標 Y_i X_i が与えられます。


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

H 行での出力

・ 操作後の盤面を H 行で出力してください。

T_0
...
T_(H-1)

条件

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

・ 1 ≦ H, W, N ≦ 20
・ 0 ≦ Y_i < H, 0 ≦ X_i < W
・ S は W 文字の文字列
・ S の各文字は '.' または '#'
・ S[Ya_i][Xa_i] = '.'
・ S[Yb_i][Xb_i] = '.'

入力例1

3 3 2
...
...
.#.
0 0
2 0
0 2
2 2

出力例1

AAA
...
B#B

入力例2

5 5 3
....#
.....
.....
.....
.#...
0 0
4 0
2 2
4 2
3 4
1 1

出力例2

A...#
.B...
..A..
....A
B#B..

問題一覧へ戻る

ページの先頭へ戻る