Martwy kod siedzi i nic nie robi, wpatrując się w nas, wiedząc, że nigdy nie zostanie wykonany ... ale dziś możemy się zemścić.
Specyfikacja
Dane wejściowe będą ciągiem wieloliniowym.
Każda linia może być przypisaniem lub wyrażeniem .
Zadanie
Przypisanie ma postać, w <name> = numberktórej nazwa jest ciągiem liter, znaków podkreślenia i cyfr, ale nie zaczyna się od cyfry.
Zmienne można przypisywać dowolną liczbę razy.
Wyrażenie
Wyrażenie ma formę <var_name OR number> <operation> <var_name OR number> ...
Wyrażenie może być dowolną kombinacją:
- Zmienne już zdefiniowane
- Podstawowe operatory arytmetyczne
+-*/ - Liczby (liczby całkowite)
Oczekiwany wynik
Powinieneś wypisać ciąg z nadmiarowymi przypisaniami , przydziały , które nigdy nie są używane przez następujące po nim wyrażenia , usunięte. Należy pamiętać, że przypisania można również uczynić redundantnymi, jeśli dodatkowe przypisanie do tej samej zmiennej zostanie wykonane przed wykonaniem wyrażenia używającego zmiennej.
Przypadki testowe
w
a = 10
a * 3
na zewnątrz
a = 10
a * 3
w
foo = 8
2 - 1
a = 18
na zewnątrz
2 - 1
w
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
na zewnątrz
b = 4
b / 6
b + 1
w
a = 1
a = 2
a + 1
na zewnątrz
a = 2
a + 1
w
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
na zewnątrz
Fuz__ = 8
Fuz__ / 1
w
a = 1
a + 1
a = 2
a + 1
na zewnątrz
a = 1
a + 1
a = 2
a + 1
w
a = 1
1 / 5 * 8 + 4
na zewnątrz
1 / 5 * 8 + 4
w
a = 1
a + 1
a = 1
a + 1
na zewnątrz
a = 1
a + 1
a = 1
a + 1
w
a = 7
5 / a
na zewnątrz
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;:? Gdzie drugia = 1można odrzucić tylko dlatego, żeawcześniej był ustawiony na tę samą wartość (1).