【配列活用メニュー】> 【配列に対しての複雑な処理】STEP: 6 ボウリング (paizaランク C 相当) [難易度: 1627 ±17]
※リンク先へ移動するためには[paiza]へのログインが必要です。
あなたはボウリングをしています。フレームの 1 投目を投げ終わったあなたは、次に狙うピンの番号と残っているピンの本数を知りたくなりました。ピンの情報が与えられるので、狙うべきピンの番号と残っているピンの本数を求めてください。
狙うピンの決め方は次の通りとします。
- 残っているピンのうち、先頭 (P_1側) のピンを狙います。ただし、同じ列に複数ピンがある場合は、それらのうちピン番号が最も小さいピンを狙います。
入力値(例)
1 1 1 1
1 1 1
1 1
1
出力値(例)
1
10
解答例
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 |
<?php $pin = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; $k = 0; $flag = 0; for($i = 0; $i < 4; $i++) { $input = explode(" ", trim(fgets(STDIN))); for($j = 0; $j < count($input); $j++) { $key = $pin[$k]; $value = $input[$j]; $array_pin[$key] = $value; $k++; } } foreach($array_pin as $key => $value) { if($value == 1) { $flag++; $pin_key[] = $key; } } echo min($pin_key). "\n"; echo $flag. "\n"; ?> |
解説
分かりにくいのですが、入力値が4行あって、1行目の1番目が10で続いて9,8,7...というピンの並びになっています。それなので、配列に$pin = [10, 9, 8, 7,......2,1];と入れて受け取りで値が連想配列になるように工夫しました。「10 => 1」
もう少しスマートなやり方があるんじゃないかとまだもんもんとしています。(*'ω'*)w
キレイな方法がありましたらぜひ教えてください。