Toter Code sitzt da und tut nichts. Er starrt uns an und weiß, dass er niemals ausgeführt wird ... aber heute können wir uns rächen.
Spezifikation
Die Eingabe ist eine mehrzeilige Zeichenfolge.
Jede Zeile kann entweder eine Zuweisung oder ein Ausdruck sein .
Zuordnung
Eine Zuordnung hat die Form <name> = number
dass der Name eine Folge von Buchstaben, Unterstrichen und Zahlen ist, aber nicht mit einer Zahl beginnt.
Variablen können beliebig oft zugewiesen werden.
Ausdruck
Ein Ausdruck ist von der Form <var_name OR number> <operation> <var_name OR number> ...
Ein Ausdruck kann eine beliebige Kombination sein aus:
- Bereits definierte Variablen
- Grundrechenarten
+-*/
- Zahlen (ganze Zahlen)
Erwartete Ausgabe
Die Ausgabe sollte die Zeichenfolge mit redundanten Zuweisungen , Zuweisungen , die nie durch eine der verwendete Ausdrücke folgenden es, entfernt. Beachten Sie, dass Zuweisungen auch überflüssig werden können, wenn eine zusätzliche Zuweisung zu derselben Variablen vorgenommen wird, bevor ein Ausdruck mit der Variablen ausgeführt wird.
Testfälle
im
a = 10
a * 3
aus
a = 10
a * 3
im
foo = 8
2 - 1
a = 18
aus
2 - 1
im
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
aus
b = 4
b / 6
b + 1
im
a = 1
a = 2
a + 1
aus
a = 2
a + 1
im
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
aus
Fuz__ = 8
Fuz__ / 1
im
a = 1
a + 1
a = 2
a + 1
aus
a = 1
a + 1
a = 2
a + 1
im
a = 1
1 / 5 * 8 + 4
aus
1 / 5 * 8 + 4
im
a = 1
a + 1
a = 1
a + 1
aus
a = 1
a + 1
a = 1
a + 1
im
a = 7
5 / a
aus
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;
:? Wobei der zweitea = 1
nur verworfen werden kann, weila
zuvor der gleiche Wert eingestellt war (1
).