Мертвый код сидит там, ничего не делая, глядя на нас, зная, что он никогда не будет выполнен ... но сегодня мы можем отомстить.
Спецификация
На входе будет многострочная строка.
Каждая строка может быть либо назначением, либо выражением .
присваивание
Назначение имеет форму, <name> = number
где имя - это последовательность букв, подчеркиваний и цифр, но не начинающаяся с цифры.
Переменные могут быть назначены любое количество раз.
выражение
Выражение имеет форму <var_name OR number> <operation> <var_name OR number> ...
Выражение может быть любой комбинацией:
- Переменные уже определены
- Основные арифметические операторы
+-*/
- Числа (целые числа)
Ожидаемый результат
Вы должны вывести строку с избыточными присваиваниями , присвоения , которые никогда не используются ни одним из следующих за ним выражений , удалены. Обратите внимание, что назначения также можно сделать избыточными, если перед выполнением выражения с использованием этой переменной выполняется дополнительное присвоение той же переменной .
Контрольные примеры
в
a = 10
a * 3
вне
a = 10
a * 3
в
foo = 8
2 - 1
a = 18
вне
2 - 1
в
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
вне
b = 4
b / 6
b + 1
в
a = 1
a = 2
a + 1
вне
a = 2
a + 1
в
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
вне
Fuz__ = 8
Fuz__ / 1
в
a = 1
a + 1
a = 2
a + 1
вне
a = 1
a + 1
a = 2
a + 1
в
a = 1
1 / 5 * 8 + 4
вне
1 / 5 * 8 + 4
в
a = 1
a + 1
a = 1
a + 1
вне
a = 1
a + 1
a = 1
a + 1
в
a = 7
5 / a
вне
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;
? Где втораяa = 1
может быть отброшена только потому, чтоa
ранее было установлено то же значение (1
).