【いびつなリバーシ対戦】STEP: 7 いびつなひとりリバーシ (paizaランク B 相当) 解答例 – PHP編【Aランクレベルアップメニュー】
【Aランクレベルアップメニュー】 > 【いびつなリバーシ対戦】STEP: 7 いびつなひとりリバーシ (paizaランク B 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
「STEP:6」の操作を指定された回数繰り返す問題です。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
<?php $input = explode(" ",trim(fgets(STDIN))); $row = $input[0]; //マップの行数を取得する $col = $input[1]; //マップの列数を取得する $num = $input[2]; //石を置く回数を取得する $flag = false; //「*」で挟んだ場合を管理するフラグ $n = 1; //石を置いた箇所から縦横を「*」に変える為に使用する変数 for($i = 0;$i < $row;$i++){ $array[] = str_split(trim(fgets(STDIN))); //マップを取得する } for($z = 0;$z < $num;$z++){ $test = explode(" ",trim(fgets(STDIN))); //石を置く座標を取得 $sy = $test[0]; //石を置くy座標を取得する $sx = $test[1]; //石を置くx座標を取得する $array[$sy][$sx] = "*"; //石を置く /*--------------------石を置いた箇所から縦列下方向を「*」に変える処理開始--------------*/ while(isset($array[$sy + $n][$sx])){ //石のを置いた位置から下方向に「*」があるか探索する if($array[$sy + $n][$sx] == "*"){ $flag = true; break; } elseif($array[$sy + $n][$sx] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ for($i = $n;$i > 0;$i--){ //「*」で挟んだ時、間を全て「*」にする $array[$sy + $i][$sx] = "*"; } } /*--------------------石を置いた箇所から縦列下方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から縦列上方向を「*」に変える処理開始--------------*/ while(isset($array[$sy - $n][$sx])){ //石のを置いた位置から上方向に「*」があるか探索する if($array[$sy - $n][$sx] == "*"){ $flag = true; break; } elseif($array[$sy - $n][$sx] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ for($i = $n;$i > 0;$i--){ //「*」で挟んだ時、間を全て「*」にする $array[$sy - $i][$sx] = "*"; } } /*--------------------石を置いた箇所から縦列下方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から横右方向を「*」に変える処理開始--------------*/ while(isset($array[$sy][$sx + $n])){ //石のを置いた位置から右方向に「*」があるか探索する if($array[$sy][$sx + $n] == "*"){ $flag = true; break; } elseif($array[$sy][$sx + $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ //「*」で挟んだ時、間を全て「*」にする for($i = $n;$i > 0;$i--){ $array[$sy][$sx + $i] = "*"; } } /*--------------------石を置いた箇所から横右方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から横左方向を「*」に変える処理開始--------------*/ while(isset($array[$sy][$sx - $n])){ //石のを置いた位置から左方向に「*」があるか探索する if($array[$sy][$sx - $n] == "*"){ $flag = true; break; } elseif ($array[$sy][$sx - $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ //「*」で挟んだ時、間を全て「*」にする for($i = $n;$i > 0;$i--){ $array[$sy][$sx - $i] = "*"; } } /*--------------------石を置いた箇所から横左方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から斜め右下方向を「*」に変える処理開始--------------*/ while(isset($array[$sy + $n][$sx + $n])){ //石のを置いた位置から斜め右下に「*」があるか探索する if($array[$sy + $n][$sx + $n] == "*"){ $flag = true; break; } elseif ($array[$sy + $n][$sx + $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ for($i = $n;$i > 0;$i--){ //「*」で挟んだ時、間を全て「*」にする $array[$sy + $i][$sx + $i] = "*"; } } /*--------------------石を置いた箇所から斜め右下方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から斜め右上方向を「*」に変える処理開始--------------*/ while(isset($array[$sy - $n][$sx + $n])){ //石のを置いた位置から斜め右上方向に「*」があるか探索する if($array[$sy - $n][$sx + $n] == "*"){ $flag = true; break; } elseif ($array[$sy - $n][$sx + $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ for($i = $n;$i > 0;$i--){ //「*」で挟んだ時、間を全て「*」にする $array[$sy - $i][$sx + $i] = "*"; } } /*--------------------石を置いた箇所から斜め右上方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から斜め左下方向を「*」に変える処理開始--------------*/ while(isset($array[$sy + $n][$sx - $n])){ //石のを置いた位置から斜め左下に「*」があるか探索する if($array[$sy + $n][$sx - $n] == "*"){ $flag = true; break; } elseif ($array[$sy + $n][$sx - $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ //「*」で挟んだ時、間を全て「*」にする for($i = $n;$i > 0;$i--){ $array[$sy + $i][$sx - $i] = "*"; } } /*--------------------石を置いた箇所から斜め左下方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 /*--------------------石を置いた箇所から斜め左上方向を「*」に変える処理開始--------------*/ while(isset($array[$sy - $n][$sx - $n])){ //石のを置いた位置から斜め左上方向に「*」があるか探索する if($array[$sy - $n][$sx - $n] == "*"){ $flag = true; break; } elseif ($array[$sy - $n][$sx - $n] == "#"){ //「#」に当たったら処理を中断する break; } else { $n++; } } if($flag == true){ //「*」で挟んだ時、間を全て「*」にする for($i = $n;$i > 0;$i--){ $array[$sy - $i][$sx - $i] = "*"; } } /*--------------------石を置いた箇所から斜め左上方向を「*」に変える処理修了--------------*/ $flag = false; //フラグの初期化 $n = 1; //変数の初期化 } foreach($array as $value){ //マップを出力する foreach($value as $item){ echo $item; } echo "\n"; } ?> |
