【Aランクレベルアップメニュー】> 【へび】STEP: 2 移動が可能かの判定・方向 (paizaランク B 相当) [難易度: 1483 ±11]
※リンク先へ移動するためには[paiza]へのログインが必要です。
マップの行数 H と列数 W , 障害物を '#' , 移動可能な場所を '.' で表した H 行 W 列のマップ S_1 ... S_H が与えられます。
続けて現在の座標 sy , sx , 現在向いている方角 d , 1マス移動する方向 m が与えられるので、移動が可能かどうかを判定してください。
移動が可能であるということは、以下の図の通り
「移動先が障害物でない かつ 移動先がマップの範囲外でない」
ということを意味します。
なお、マスの座標系は左上端のマスの座標を ( y , x ) = ( 0 , 0 ) とし、
下方向が y 座標の正の向き、右方向が x 座標の正の向きとします。
入力値(例)
2 6 0 4 E L
####..
##..#.
出力値(例)
No
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php list($h, $w, $sy, $sx, $d, $m) = explode(" ", trim(fgets(STDIN))); for ($i = 0; $i < $h; $i++) { $board[] = trim(fgets(STDIN)); } $lr = 1; if ($m == 'L') { $lr = -1; } if ($d == 'N') { $sx += $lr; } elseif ($d == 'S') { $sx -= $lr; } elseif ($d == 'E') { $sy += $lr; } else { $sy -= $lr; } $point = $board[$sy][$sx]; echo ($point == "." and ($sy != -1 and $sx != -1)) ? "Yes" : "No"; ?> |