paiza Aランクレベルアップセット「STEP: 9 座標系での規則的な移動 PHP編」

paizaのAランクレベルアップセットの通ったコードを置いてみました。

ただ、まだまだ未熟なうえ、基本的に原始的なアプローチなので参考になりますかどうか。まあいいか。


<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    //・ 1 行で、開始時点の x , y 座標を表す X , Y, 移動の歩数 N が与えられます。

    $s = explode(" ",trim(fgets(STDIN)));
    
    $x = $s[0];
    $y = $s[1];
    $num = $s[2];
    
    $dis = "E";//初期方角
    
    $turn_point = array(1,2,4,6,9,12,16,20,25,30,36,42,49,56,64,72,81,90,100); //曲がるポイント
    //print_r($turn_point);


    for ($i = 0; $i < $num; $i++) {
        $hoge = $turn_point[0];
        
        if($i == $hoge){ //曲がるポイントだったら
            if($dis=="N"){
                $dis = "E";
            }elseif($dis=="E"){
                $dis = "S";
            }elseif($dis=="S"){
                $dis = "W";
            }elseif($dis=="W"){
                $dis = "N";
            }
            
            array_shift($turn_point);//使用済みの最初の値を削除
        }
        
        //移動
        if($dis=="N"){
            $y--;
        }elseif($dis=="E"){
            $x++;
        }elseif($dis=="S"){
            $y++;
        }elseif($dis=="W"){
            $x--;
        }
    }
    
    echo($x." ".$y."\n");


?>

補足

曲がるポイントの規則性が分からなかったので、
やもなく配列に入れ、曲がるポイントに来たら方角を変えるという操作をしています。
使ったらその値は削除して、常に配列の0番目を使う形です。
これ100手順だったからよかったですけど、1000手順だったらこの方法は使えないですね。

0