Menu
Coddy logo textTech

Итоги — Pipeline Builder

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 43 из 56.

challenge icon

Задание

Средне

Создайте небольшой конвейер данных, управляемый замыканиями.

Прочитайте три строки:

  1. Целое число min
  2. Целое число scale
  3. Список целых чисел, разделенных запятыми

Определите две фабрики замыканий:

  • makeFilter(min: Int) -> (Int) -> Bool захватывает min и возвращает предикат n > min
  • makeScaler(by: Int) -> (Int) -> Int захватывает by и возвращает функцию, которая умножает на это значение

Затем определите функцию pipeline(_ nums: [Int], filter: (Int) -> Bool, transform: (Int) -> Int) -> [Int], которая сначала фильтрует, а затем преобразует данные.

Выведите три строки:

  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:);
// затем вывести отфильтрованные, масштабированные значения и сумму масштабированных

Все уроки раздела Логика и управление потоком