問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
へびがマップ上を移動していきます。
マップの行数 H と列数 W , 障害物を '#' で移動可能な場所を '.' で表した H 行 W 列のマップ S_1 ... S_H , 現在の座標 sy , sx , 方向転換の回数 N が与えられます。
続けて N 回の方向転換する時刻 t_1 ... t_N , 転換する向き d_1 ... d_N が与えられます。
へびははじめ、北を向いています。
時刻 0 から 99 までの間、へびは各時刻に次の行動を最大 100 回とります。
・ 方向転換をおこなう時刻の場合、指定の向きに方向転換したのち 1 マス身体を伸ばす。
・ そうでない時は移動が可能な場合に限り、今向いている方向に 1 マス身体を伸ばす。
各移動が可能であるということは、
「移動先のマスに障害物がない かつ 移動先がマップの範囲外でない」
ということを意味します。
各移動が可能である場合、各移動が終了した時の y , x 座標を出力してください。
移動が可能でない場合、"Stop" を出力して以降の移動を打ち切ってください。
なお、マスの座標系は左上端のマスの座標を ( y , x ) = ( 0 , 0 ) とし、
下方向が y 座標の正の向き、右方向が x 座標の正の向きとします。
移動の一例をあげます。例えば次のような入力が与えられた時は図のような移動になります。
5 5 4 0 1
.....
.....
.#...
.....
.....
2 R
H W sy sx N
S_0
...
S_(H-1)
t_1 d_1
...
t_N d_N
M (1 ≦ M ≦ 100) 行の出力
・ 時刻 k (1 ≦ k ≦ M) の移動後の y , x 座標、y_k, x_k を出力してください。
・ ただし、時刻 M で移動が可能でない場合、"Stop" を出力してください。
y_1 x_1
...
y_k x_k
...
y_M x_M
y_1 x_1
...
y_k x_k
...
y_(M-1) x_(M-1)
Stop
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ H, W ≦ 20
・ 1 ≦ N ≦ 100
・ 0 ≦ sy < H , 0 ≦ sx < W
・ 0 ≦ t_i ≦ 99
・ t_i < t_(i+1)
・ 時刻は 0 から始まり、 99 の時の移動を終えるまでもしくは移動ができなくなるまで移動を繰り返す。
・ S_i は W 文字の文字列
・ マップ上の (sy, sx) のマスは必ず '.'
・ S の各文字は '.' または '#'
・ d_i は、L, R のいずれかであり、それぞれ 左・右 を意味します。
10 10 5 5 22
........#.
..........
..........
..........
#.........
..........
..........
........#.
..........
..........
0 L
3 R
4 L
7 L
10 R
12 R
21 L
24 L
26 R
28 R
35 L
36 R
41 R
44 R
62 L
63 L
72 L
81 L
85 R
90 R
92 R
98 R
5 4
5 3
5 2
4 2
4 1
Stop
18 16 13 12 26
.....#...#......
.#........#.#...
................
#.......#.......
...........##.#.
......#.........
....#...........
................
..........#.....
......###.......
...............#
........#.#.....
................
.#....#.........
...........#...#
#.#.#...........
..#.............
................
1 R
2 R
7 R
9 L
30 L
33 R
34 R
39 R
40 L
41 L
45 L
46 L
51 R
52 R
53 R
57 L
61 L
62 R
63 R
64 R
70 R
75 R
83 R
84 R
93 R
97 R
12 12
12 13
13 13
14 13
15 13
16 13
17 13
17 12
17 11
Stop