O código morto fica lá, sem fazer nada, olhando para nós sabendo que nunca será executado ... mas hoje podemos nos vingar.
Especificação
A entrada será uma sequência multilinha.
Cada linha pode ser uma atribuição ou uma expressão .
Tarefa
Uma atribuição é da forma em <name> = number
que nome é uma sequência de letras, sublinhados e números, mas não começa com um número.
As variáveis podem ser atribuídas qualquer número de vezes.
Expressão
Uma expressão é da forma <var_name OR number> <operation> <var_name OR number> ...
Uma expressão pode ser qualquer combinação de:
- Variáveis já definidas
- Operadores aritméticos básicos
+-*/
- Números (inteiros)
Saída esperada
Você deve saída a corda com redundantes atribuições , tarefas que nunca são usadas por qualquer das expressões que se lhe segue, removidos. Observe que as atribuições também podem ser redundantes se uma atribuição adicional para a mesma variável for realizada antes de uma expressão usando a variável seja executada.
Casos de teste
em
a = 10
a * 3
Fora
a = 10
a * 3
em
foo = 8
2 - 1
a = 18
Fora
2 - 1
em
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
Fora
b = 4
b / 6
b + 1
em
a = 1
a = 2
a + 1
Fora
a = 2
a + 1
em
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
Fora
Fuz__ = 8
Fuz__ / 1
em
a = 1
a + 1
a = 2
a + 1
Fora
a = 1
a + 1
a = 2
a + 1
em
a = 1
1 / 5 * 8 + 4
Fora
1 / 5 * 8 + 4
em
a = 1
a + 1
a = 1
a + 1
Fora
a = 1
a + 1
a = 1
a + 1
em
a = 7
5 / a
Fora
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;
:? Onde o segundoa = 1
pode ser descartado apenas porquea
foi definido anteriormente com o mesmo valor (1
).