このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「ボウリング (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
あなたはボウリングをしています。フレームの 1 投目を投げ終わったあなたは、次に狙うピンの番号と残っているピンの本数を知りたくなりました。ピンの情報が与えられるので、狙うべきピンの番号と残っているピンの本数を求めてください。
狙うピンの決め方は次の通りとします。
– 残っているピンのうち、先頭 (P_1側) のピンを狙います。ただし、同じ列に複数ピンがある場合は、それらのうちピン番号が最も小さいピンを狙います。
入力される値
1 2 3 4 |
P_10 P_9 P_8 P_7 P_6 P_5 P_4 P_3 P_2 P_1 |
- 4 行でピンの情報が与えられます。ピン番号は以上の通りです。
- P_1 が先頭のピンです。
- P_i (1 ≦ i ≦ 10) が のとき、その位置にはピンがないことを、 1 のときその位置にピンが残っていることを表します。
期待する出力
1 2 |
狙うピンの番号 残っているピンの本数 |
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import Foundation // 1. 行末まで一気に読み込み // 2. 空白で区切り二次元配列にし // 3. 二次元配列を一次元配列に変換し // 4. 逆順にした上 // 5. 要素を Int に変換する var ia = Array(AnyIterator { readLine() }) .map { $0.split(separator: " ") } .flatMap { $0 } .reversed() .map { Int($0) } //最初に現れたピンの位置 let top = ia.firstIndex(of: 1)! // 残りのピンの個数 let pin = ia.filter { $0 == 1 }.count // 結果表示 print(top + 1) print(pin) |