1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランクレベルアップメニュー(言語選択)
  4. 問題一覧 Haskell(Beta)編
  5. 陣取りゲーム Haskell(Beta)編

Aランクレベルアップメニューのアイコン
陣取りゲーム Haskell(Beta)編(paizaランク A 相当)

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

問題

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

A さんと B さんは次の操作を交互に繰り返すことで陣取りゲームをしようと考えました。 2 人の操作によって盤面が変化しなくなったらゲームを終了します。

・ 現在の陣地から上下左右に 1 マス移動することで到達できる、まだ誰の陣地でもない全てのマスを新たに陣地にする。ただし、障害物( '#' )のマスは陣地にできない。
・ 新たに陣地にできるマスが無い場合、何もしない。

盤面の情報と、先攻のプレイヤーの名前が与えられます。
盤面では、はじめに A さんのいるマスが 'A' , B さんのいるマスが 'B' で表されています。
ゲーム終了時に A さん、B さん、それぞれの陣地のマス数と勝った人の名前を出力してください。

なお、引き分けにはならないことが保証されています。

例として、ゲームが次のような状態でスタートした場合、

・ Aさんが先攻のときは次のような結果になるので、



6 3
A

と出力してください。

・ Bさんが先攻のときは次のような結果になるので、



3 6
B

と出力してください。

入力される値

H W     
N
S_0
...
S_(H-1)


・ 1 行目では、マップの行数 H , 列数 W が与えられます。
・ 2 行目では、先攻のプレイヤーの名前 N が与えられます。
・ 続く H 行のうち i 行目 (0 ≦ i < H) には、盤面の i 行目の文字をまとめた文字列 S_i が与えられ、S_i の j 文字目は、盤面の i 行目の j 列目に書かれている文字を表します。(0 ≦ j < W)


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

2 行の出力

・ A さんの陣地のマス数 T_A と B さんの陣地のマス数 T_B を 1 行目に、勝者の名前 W_N を 2 行目に出力してください。
・ 2 人のマス数の間には半角スペースを 1 つ入れてください。

T_A T_B
W_N

条件

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

・ 1 ≦ H, W ≦ 1000
・ N は 'A' か 'B'
・ S は W 文字の文字列
・ S の各文字は '.', '#', 'A', 'B'のいずれか
・ 'A' , 'B' のマスは1つ
・ 必ずゲームの勝者が決定する

入力例1

3 3
A
A..
...
..B

出力例1

6 3
A

入力例2

3 3
B
A.B
...
...

出力例2

3 6
B

問題一覧へ戻る

ページの先頭へ戻る