【へび】STEP: 6 時刻に伴う移動 (paizaランク A 相当) 解答例 – PHP編【Aランクレベルアップメニュー】
【Aランクレベルアップメニュー】 > 【へび】STEP: 6 時刻に伴う移動 (paizaランク A 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
ついにAランク問題がお目見えです。時刻によって移動する向きが変わる問題です。
解答例
|
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
<?php $input = explode(" ",trim(fgets(STDIN))); $row = $input[0]; //行数を取得する $col = $input[1]; //列数を取得する $sy = $input[2]; //初期位置のy座標を取得する $sx = $input[3]; //初期位置のx座標を取得する $num = $input[4]; //方向転換の回数を取得する $m =0; //向きを管理するカウンター $trunnum =0; //時刻を管理するカウンター for($i = 0;$i < $row;$i++){ $array[] = str_split(trim(fgets(STDIN))); //マップを取得する } for($j =0;$j < $num;$j++){ $data = explode(" ",trim(fgets(STDIN))); $hosuu = $data[0]; //方向転換する時刻 $realhosuu = $hosuu - $trunnum; // 座標の変化分 $trunnum = $hosuu; //時刻の変化分 $trun = $data[1]; //方向転換する向き if($realhosuu != 0){ //座標が変化するならば for($i = 0;$i < $realhosuu;$i++){ if($m == 0/*北を向いている時*/){ if($array[$sy - 1][$sx] != "."){ echo "Stop"; $m = 99; break; } else { $sy--; echo $sy." ".$sx."\n"; } } elseif($m == 1/*西を向いている時*/){ if($array[$sy][$sx - 1] != "."){ echo "Stop"; $m = 99; break; } else { $sx--; echo $sy." ".$sx."\n"; } } elseif($m == 2/*東を向いている時*/){ if($array[$sy][$sx + 1] != "."){ echo "Stop"; $m = 99; break; } else { $sx++; echo $sy." ".$sx."\n"; } } elseif($m == 3/*南を向いている時*/){ if($array[$sy + 1][$sx] != "."){ echo "Stop"; $m = 99; break; } else { $sy++; echo $sy." ".$sx."\n"; } } if($m == 99){ break; } } } if ($m == 0){ if($trun == "L"){ $m = 1; } elseif($trun == "R"){ $m = 2; } } elseif($m ==1){ if($trun == "L"){ $m = 3; } elseif($trun == "R"){ $m = 0; } } elseif($m ==2){ if($trun == "L"){ $m = 0; } elseif($trun == "R"){ $m = 3; } } elseif($m ==3){ if($trun == "L"){ $m = 2; } elseif($trun == "R"){ $m = 1; } } } ?> |
