今回は、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";
}
?>