Menu
Coddy logo textTech

まとめ:Pipeline Builder

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 43/56。

challenge icon

チャレンジ

中級

クロージャによって駆動される小さなデータパイプラインを構築します。

3行を読み込みます:

  1. 整数 min
  2. 整数 scale
  3. カンマ区切りの整数のリスト

2つのクロージャファクトリを定義します:

  • makeFilter(min: Int) -> (Int) -> Boolmin をキャプチャし、述語 n > min を返します
  • makeScaler(by: Int) -> (Int) -> Intby をキャプチャし、それを掛ける関数を返します

次に、最初にフィルタリングを行い、その後に変換を行う関数 pipeline(_ nums: [Int], filter: (Int) -> Bool, transform: (Int) -> Int) -> [Int] を定義します。

3行出力します:

  1. フィルタを通過した数値を , で連結したもの
  2. スケーリング後の同じ数値を , で連結したもの
  3. スケーリングされた値の合計

入力が 5 / 3 / 2,7,3,8,9 の場合、出力は以下の通りです:

7,8,9
21,24,27
72

自分で試してみよう

let minVal = Int(readLine()!)!
let scale = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: クロージャを返す makeFilter / makeScaler、pipeline(_:filter:transform:) を作成。
// その後、フィルタリングされた値、スケールされた値、およびスケールされた値の合計を出力する。

ロジックとフローのすべてのレッスン