1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 新・Bランクレベルアップメニュー(言語選択)
  4. 問題一覧
  5. 【マップの扱い 3】マップの判定・縦横斜め

新・Bランクレベルアップメニューのサムネイル
【マップの扱い 3】マップの判定・縦横斜め (paizaランク B 相当)

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

問題

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

マップの行数 H と列数 W とマップを表す H 行 W 列の文字列 S_1 ... S_H と y , x 座標 が与えられるので、与えられた座標のマス(y, x) と、 (y, x) と同じ縦・横・斜めの列に存在する全てのマスについて次の処理をおこなった後の盤面を出力してください。

マスに書かれている文字が "." の場合は "#" に、"#" の場合は "." に書き換える。

なお、マスの座標系は左上端のマスの座標を ( y , x ) = ( 0 , 0 ) とし、
下方向が y 座標の正の向き、右方向が x 座標の正の向きとします。
マス(y,x) と同じ斜めの列とは整数 a を用いて (y+a,x+a), (y+a,x-a), (y-a,x-a), (y-a,x+a) のいずれかで表されるマスの集合です。例として下図の黒いマスと同じ斜め列は赤いマスのようになります。

入力される値

H W
S_0
...
S_(H-1)
y x


・ 1 行目には盤面の行数を表す整数 H , 盤面の列数を表す整数 W が与えられます。
・ 続く H 行のうち i 行目 (0 ≦ i < H) には、盤面の i 行目の文字をまとめた文字列 S_i が与えられ、 S_i の j 文字目は、盤面の i 行目の j 列目に書かれている文字を表します。(0 ≦ j < W)
・ 続く 1 行 には、 文字を書き換えるマスの y , x 座標が与えられます。


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

H 行での出力

・ 書き換えた後の盤面を H 行で出力してください。

条件

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

・ 1 ≦ H , W ≦ 20
・ 0 ≦ y < H, 0 ≦ x < W
・ S_i は W 文字の文字列 (0 ≦ i < H)
・ S_i の各文字は "." または "#" (0 ≦ i < H)

入力例1

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

出力例1

..#
..#
#.#

入力例2

10 10
##########
..........
##########
##########
..........
#.#.#.#.#.
.#.#.#.#.#
#.#.#.#.#.
.#.#.#.#.#
..........
5 5

出力例2

.####.####
.#...#...#
##.##.##.#
###.#.#.##
....###...
.#.#.#.#.#
.#.##.##.#
#.#######.
.###...###
.#...#...#

問題一覧へ戻る

ページの先頭へ戻る