
通りましたが、どうもこのコードには何か不備がある予感がします。ほんのご参考まで。
<?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;
}
}
//---------------------------------------------
//斜めの操作
//---------------------------------------------
//xより右下に石があるだろうか?
if($x+2 <$w && $y+2 <$h){
for ($i = $y+2; $i < $h; $i++) {
for ($j = $x+2; $j < $w; $j++) {
if($maps[$i][$j]=="*"){
//右下に石がある
//echo("右下に石発見、座標はy x".$j.",".$i."\n");
for($k=$y, $m=$x; $k<=$i; $k++,$m++){//ここを$k<$iを$k<=$iに直したらstep4が通ったがそのこと自体がおかしい
$maps[$k][$m]="*";
}
break 2;
}
}
}
}
//xより右上に石があるだろうか?
if($x+2 <$w && $y-2 >= 0){//「<=」が必須
for ($i = $y-2; $i >= 0; $i--) {
for ($j = $x+2; $j < $w; $j++) {
if($maps[$i][$j]=="*"){
//右上に石がある
//echo("右上に石発見、座標はy x".$j.",".$i."\n");
for($k=$y, $m=$x; $k>$i; $k--,$m++){
$maps[$k][$m]="*";
}
break 2;
}
}
}
}
//xより左上に石があるだろうか?
if($x-2 >= 0 && $y-2 >= 0){
//echo("here\n");
for ($i = $y-2; $i >=0 ; $i--) {
for ($j = $x-2; $j >=0; $j--) {
//echo("yx ".$y.",".$x."\n");
if($maps[$i][$j]=="*"){
//左上に石がある
//echo("左上に石発見、座標はy x".$j.",".$i."\n");
for($k=$i, $m=$j; $k<$y; $k++,$m++){
$maps[$k][$m]="*";
}
break 2;
}
}
}
}
//xより左下に石があるだろうか?
if($x-2 >= 0 && $y+2 <= $h){//$y+2 <= $h の =はいるかいらないか??
//echo("here\n");
for ($i = $y+2; $i < $h ; $i++) { //なぜかここは $i <= $h とできない
for ($j = $x-2; $j >=0; $j--) {
//echo("yx ".$y.",".$x."\n");
if($maps[$i][$j]=="*"){
//左上に石がある
//echo("左上に石発見、座標はy x".$j.",".$i."\n");
for($k=$y, $m=$x; $k<$i; $k++,$m--){
$maps[$k][$m]="*";
}
break 2;
}
}
}
}
//出力
for ($i = 0; $i < $h; $i++) {
for ($j = 0; $j < $w; $j++) {
echo($maps[$i][$j]);
}
echo("\n");
}
?>
0