PR

Paiza【マップの扱い 4】マップのナンバリング – PHP

Paiza【マップの扱い 4】マップのナンバリング サムネイル
記事内に広告が含まれています。

今回は、Paizaの新・Bランクレベルアップメニューの【マップの扱い 4】マップのナンバリングにPHPで挑戦しました。私自身、プログラミング未経験なので変数等に違和感があります。参考程度に見ていただければと思います。

問題文

マップの行数 H と列数 W とナンバリングの向き D が与えられるので、(0, 0) から指示通りにナンバリングしたとき、マップ全体にどのように番号が振られるかを出力してください。

コード

<?php
    list($h, $w, $d) = explode(" ", trim(fgets(STDIN)));
    $count = 1;
    
switch($d){
        
    case 1:
        $array[0][0] = $count;
        $count = 2;
        
        for($i = 1; $i < $h; $i++){
            for($j = 0; $j <= min($i, $w - 1); $j++){
                $array[$i - $j][$j] = $count;
                $count++;
            }
        }
    
        for($i = 1; $i < $w; $i++){
            for($j = 0; $j < min($h, $w - $i); $j++){
                $array[$h - 1 - $j][$i + $j] = $count;
                $count++;
            }
        }
	break;

    case 2:
        for($i = 0; $i < $h; $i++){
            for($j = 0; $j < $w; $j++){
                $array[$i][$j] = $count;
                $count++;
            }
        }
	break;

    case 3:
        for($i = 0; $i < $w; $i++){
            for($j = 0; $j < $h; $j++){
                $array[$j][$i] = $count;
                $count++;
            }
        }
	break;

    case 4:
        $array[0][0] = $count;
        $count = 2;
    
        for($i = 1; $i < $w; $i++){
            for($j = 0; $j <= min($i, $h - 1); $j++){
                $array[$j][$i - $j] = $count;
                $count++;
            }
        }
    
        for($i = 1; $i < $h; $i++){
            for($j = 0; $j < min($w, $h - $i); $j++){
                $array[$i + $j][$w - 1 - $j] = $count;
                $count++;
            }
        }
	break;
}
    
    foreach($array as $value){
        echo implode(" ", $value);
        echo "\n";
    }
?>

メモ