Aランクレベルアップメニュー STEP: 25「リバーシの操作(縦横) PHP編」

コードに不備があったので訂正しました。(2020/09.25)

(自分的に)条件文がなかなかシビアで苦労しました。特にfor文の回し始めのあたり。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!
    
    //・ 出力する盤面の行数 H ,列数 W と石を置くマスの y , x 座標である Y , X が与えられます。
    
    $s = explode(" ",trim(fgets(STDIN)));
    
    $h = $s[0];
    $w = $s[1];
    $y = $s[2];
    $x = $s[3];

    for ($i = 0; $i < $h; $i++) {
        $hoge = trim(fgets(STDIN));
        for ($j = 0; $j < $w; $j++) {
            $maps[$i][$j] = mb_substr($hoge, $j,1);
        }
    }
    
    $maps[$y][$x] ="*";
    
    //xより右に石があるだろうか?
    for ($i = $x+1; $i < $w; $i++) {
        //echo("i ".$i."\n");
        if($maps[$y][$i]=="*"){
            //右に石がある
            //echo("右に石発見、座標はy x".$y.",".$i."\n");
            for($j = $x; $j<$i; $j++){//$j<=$iを修正
                //echo("here"."\n");
                $maps[$y][$j]="*";
            }
            break;//見つけたらそれ以上探索しない
        }
    }
    //xより左に石があるだろうか?
    for ($i = $x-1; $i >= 0; $i--) {
        if($maps[$y][$i]=="*"){
            //左に石がある
            for($j = $x; $j>=$i; $j--){
                //echo("here"."\n");
                $maps[$y][$j]="*";
            }
            break;
        }
        
    }
    //yより下に石があるだろうか?
    for ($i = $y+1; $i < $h; $i++) {
        if($maps[$i][$x]=="*"){
            //下に石がある
            for($j = $y; $j<=$i; $j++){
                $maps[$j][$x]="*";
            }
            break;
            
        }
        
    }
    
    //yより上に石があるだろうか?
    for ($i = $y-1; $i >= 0; $i--) {
        if($maps[$i][$x]=="*"){
            //上に石がある
            for($j = $y; $j>=$i; $j--){
                $maps[$j][$x]="*";
            }
            break;
        }
    }
    
    
    //出力
    for ($i = 0; $i < $h; $i++) {
        for ($j = 0; $j < $w; $j++) {
            echo($maps[$i][$j]);
        }
        echo("\n");
    }


?>

普段、こんな変なところにbreak;を入れたことないんですが、
paiza.ioで確認すると、この下のところだとエラーなんですね。ここである必要があるっぽい。謎です。

→ ああそうか、そりゃそうです、次の}が終わった後に入れると、
「if文を通ってないときに自動でbreak;」になってしまう。なるほどなるほど。(自己解決)

breakしないとcase3あたりで引っかかります。
入力例は本当に良く考えられている。

kue

paiza Aランクレベルアップメニュー(PHP編)

https://paiza.jp/works/mondai/a_rank_level_up_problems/problem_index?language_uid=php

1+