Le code mort est là, ne faisant rien, nous fixant sachant qu'il ne sera jamais exécuté ... mais aujourd'hui, nous pouvons nous venger.
spécification
L'entrée sera une chaîne multiligne.
Chaque ligne peut être soit une affectation, soit une expression .
Affectation
Une affectation prend la forme <name> = number
où nom est une séquence de lettres, de soulignements et de chiffres, mais ne commençant pas par un nombre.
Les variables peuvent être affectées un certain nombre de fois.
Expression
Une expression est de la forme <var_name OR number> <operation> <var_name OR number> ...
Une expression peut être n'importe quelle combinaison de:
- Variables déjà définies
- Opérateurs arithmétiques de base
+-*/
- Nombres (entiers)
Production attendue
Vous devez sortir la chaîne avec des affectations redondantes , affectations qui ne sont jamais utilisées par aucune des expressions qui la suivent, supprimées. Veuillez noter que les affectations peuvent également être redondantes si une affectation supplémentaire à la même variable est effectuée avant l'exécution d'une expression utilisant la variable.
Cas de test
dans
a = 10
a * 3
en dehors
a = 10
a * 3
dans
foo = 8
2 - 1
a = 18
en dehors
2 - 1
dans
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
en dehors
b = 4
b / 6
b + 1
dans
a = 1
a = 2
a + 1
en dehors
a = 2
a + 1
dans
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
en dehors
Fuz__ = 8
Fuz__ / 1
dans
a = 1
a + 1
a = 2
a + 1
en dehors
a = 1
a + 1
a = 2
a + 1
dans
a = 1
1 / 5 * 8 + 4
en dehors
1 / 5 * 8 + 4
dans
a = 1
a + 1
a = 1
a + 1
en dehors
a = 1
a + 1
a = 1
a + 1
dans
a = 7
5 / a
en dehors
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;
? Où le seconda = 1
peut être ignoré uniquement parce qu'ila
était précédemment défini sur la même valeur (1
).