Il codice morto rimane lì senza fare nulla, fissandoci sapendo che non verrà mai eseguito ... ma oggi possiamo vendicarci.
specificazione
L'input sarà una stringa multilinea.
Ogni riga può essere un compito o un'espressione .
Incarico
Un compito ha la forma in <name> = number
cui nome è una sequenza di lettere, caratteri di sottolineatura e numeri, ma non inizia con un numero.
Le variabili possono essere assegnate un numero qualsiasi di volte.
Espressione
Un'espressione ha la forma <var_name OR number> <operation> <var_name OR number> ...
Un'espressione può essere una qualsiasi combinazione di:
- Variabili già definite
- Operatori aritmetici di base
+-*/
- Numeri (numeri interi)
Uscita prevista
Dovresti generare la stringa con assegnazioni ridondanti , assegnazioni che non vengono mai utilizzate da nessuna delle espressioni che la seguono, rimosse. Si noti che le assegnazioni possono anche essere ridondanti se viene eseguita un'assegnazione aggiuntiva alla stessa variabile prima che venga eseguita un'espressione che utilizza la variabile.
Casi test
nel
a = 10
a * 3
su
a = 10
a * 3
nel
foo = 8
2 - 1
a = 18
su
2 - 1
nel
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
su
b = 4
b / 6
b + 1
nel
a = 1
a = 2
a + 1
su
a = 2
a + 1
nel
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
su
Fuz__ = 8
Fuz__ / 1
nel
a = 1
a + 1
a = 2
a + 1
su
a = 1
a + 1
a = 2
a + 1
nel
a = 1
1 / 5 * 8 + 4
su
1 / 5 * 8 + 4
nel
a = 1
a + 1
a = 1
a + 1
su
a = 1
a + 1
a = 1
a + 1
nel
a = 7
5 / a
su
a = 7
5 / a
a = 1; a + 1; a = 1; a + 1;
? Dove il secondoa = 1
può essere scartato solo perchéa
precedentemente impostato sullo stesso valore (1
).