Mehrphasige polymorphe Pipeline mit Traits

Rust Hard traits

Aufgabe «Mehrphasige polymorphe Pipeline mit Traits»

Implementieren Sie ein System aus den Traits Stage, Pipeline und Transform, das die Erstellung von Datenverarbeitungspipelines ermöglicht. Der Trait Stage definiert die Methode process(&self, input: i32) -> i32. Der Trait Pipeline definiert die Methode run(&self, stages: Vec<Box<dyn Stage>>, input: i32) -> i32, die alle Stufen nacheinander anwendet. Der Trait Transform definiert die Methode transform(&self, value: i32) -> i32, die einen Wert nach einer bestimmten Regel ändern kann. Implementieren Sie die Strukturen AddStage, MultiplyStage, NegateStage, die jeweils Stage implementieren. Implementieren Sie außerdem die Struktur SimplePipeline, die Pipeline implementiert. Schreiben Sie dann eine Funktion, die eine Zeichenkette mit Befehlen (add, mul, neg) und Zahlen entgegennimmt, die entsprechenden Stufen erstellt, die Pipeline mit dem Startwert 0 ausführt und das Ergebnis ausgibt. Die Befehle werden durch Leerzeichen getrennt übergeben: add 5 mul 2 neg. Einschränkungen: Der Eingabewert ist i32, das Ergebnis passt garantiert in i32.

Eingabeformat

Eine Zeichenkette mit Befehlen und Zahlen, durch Leerzeichen getrennt. Zum Beispiel: 'add 5 mul 2 neg'.

Ausgabeformat

Eine ganze Zahl – das Ergebnis der Verarbeitung des Startwerts 0 durch die Pipeline der Stufen.

Beispiele

Beispiel 1

EINGABE
add 5 mul 2 neg
AUSGABE
-10

Beispiel 2

EINGABE
mul 3 add 10 neg
AUSGABE
-10

Beispiel 3

EINGABE
5 1 2 3 4 5
AUSGABE
0

Beispiel 4

EINGABE
add 100 mul 0
AUSGABE
0

Beispiel 5

EINGABE
4
AUSGABE
0
main.rs