Многофазный полиморфный конвейер с трейтами
Rust
Сложный
traits
Задача «Многофазный полиморфный конвейер с трейтами»
Реализуйте систему из трейтов Stage, Pipeline, и Transform, позволяющую строить конвейеры обработки данных. Трейт Stage определяет метод process(&self, input: i32) -> i32. Трейт Pipeline определяет метод run(&self, stages: Vec<Box<dyn Stage>>, input: i32) -> i32, который последовательно применяет все стадии. Трейт Transform определяет метод transform(&self, value: i32) -> i32, который может изменять значение по некоторому правилу. Реализуйте структуры AddStage, MultiplyStage, NegateStage, каждая из которых реализует Stage. Также реализуйте структуру SimplePipeline, реализующую Pipeline. Затем напишите функцию, которая принимает строку с командами (add, mul, neg) и числами, создаёт соответствующие стадии, запускает конвейер с начальным значением 0 и выводит результат. Команды подаются через пробел: add 5 mul 2 neg. Ограничения: входное значение i32, результат гарантированно помещается в i32.
Формат ввода
Строка с командами и числами, разделёнными пробелами. Например: 'add 5 mul 2 neg'.
Формат вывода
Целое число — результат обработки начального значения 0 через конвейер стадий.
Примеры
Пример 1
ВВОД
add 5 mul 2 neg
ВЫВОД
-10
Пример 2
ВВОД
mul 3 add 10 neg
ВЫВОД
-10
Пример 3
ВВОД
5
1 2 3 4 5
ВЫВОД
0
Пример 4
ВВОД
add 100 mul 0
ВЫВОД
0
Пример 5
ВВОД
4
ВЫВОД
0
main.rs