Toter Code sitzt da und tut nichts. Er starrt uns an und weiß, dass er niemals ausgeführt wird ... aber heute können wir uns rächen.
Spezifikation
Die Eingabe ist eine mehrzeilige Zeichenfolge.
Jede Zeile kann entweder eine Zuweisung oder ein Ausdruck sein .
Zuordnung
Eine Zuordnung hat die Form <name> = number
dass der Name eine Folge von Buchstaben, Unterstrichen und Zahlen ist, aber nicht mit einer Zahl beginnt.
Variablen können beliebig oft zugewiesen werden.
Ausdruck
Ein Ausdruck ist von der Form <var_name OR number> <operation> <var_name OR number> ...
Ein Ausdruck kann eine beliebige Kombination sein aus:
- Bereits definierte Variablen
- Grundrechenarten
+-*/
- Zahlen (ganze Zahlen)
Erwartete Ausgabe
Die Ausgabe sollte die Zeichenfolge mit redundanten Zuweisungen , Zuweisungen , die nie durch eine der verwendete Ausdrücke folgenden es, entfernt. Beachten Sie, dass Zuweisungen auch überflüssig werden können, wenn eine zusätzliche Zuweisung zu derselben Variablen vorgenommen wird, bevor ein Ausdruck mit der Variablen ausgeführt wird.
Testfälle
im
a = 10
a * 3
aus
a = 10
a * 3
im
foo = 8
2 - 1
a = 18
aus
2 - 1
im
a = 10
a = 8
b = 4
ab = 72
b / 6
b + 1
aus
b = 4
b / 6
b + 1
im
a = 1
a = 2
a + 1
aus
a = 2
a + 1
im
FooBar1 = 0
Fuz__ = 8
Fuz__ / 1
aus
Fuz__ = 8
Fuz__ / 1
im
a = 1
a + 1
a = 2
a + 1
aus
a = 1
a + 1
a = 2
a + 1
im
a = 1
1 / 5 * 8 + 4
aus
1 / 5 * 8 + 4
im
a = 1
a + 1
a = 1
a + 1
aus
a = 1
a + 1
a = 1
a + 1
im
a = 7
5 / a
aus
a = 7
5 / a
quelle
a = 1; a + 1; a = 1; a + 1;
:? Wobei der zweitea = 1
nur verworfen werden kann, weila
zuvor der gleiche Wert eingestellt war (1
).Antworten:
PHP - 197 Bytes
Die Funktion analysiert jede Zeile in umgekehrter Reihenfolge und nacheinander und verwaltet ein Array der verwendeten Variablen.
=
in der Zeile ein Gleichheitszeichen , handelt es sich um eine Zuweisung.1
,2
, ...) und Betreiber (+
,-
, ...) wird auch hinzugefügt werden, aber da sie nicht gültige Variablennamen sind, ist es kein Problem. Die Zeile wird dann natürlich ausgedruckt.Hier ist die ungolfed Version:
quelle
Netzhaut , 45 Bytes
Zu Zählzwecken wird jede Zeile in eine separate Datei verschoben (wobei
<empty>
es sich um eine leere Datei handelt) und\n
durch einen tatsächlichen Zeilenvorschub (0x0A) ersetzt.Dies setzt voraus, dass die Zeichenfolge immer mit einem Zeilenvorschub endet.
Da dieser Regex keine .NET-spezifischen Funktionen verwendet, können Sie ihn auf Regex101 testen .
Die Idee ist ziemlich einfach: Entfernen Sie alle Zuweisungen, von denen wir eine andere Zuweisung für dieselbe Variable oder das Ende der Zeichenfolge finden (vorwärts suchen), ohne eine andere Verwendung der Variablen zu übergeben.
quelle
Pyth, 40 Bytes
Scheint ein bisschen lang. Vielleicht kann ich morgen ein oder zwei Bytes speichern.
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
_.__.z
gibt alle Postfixes der Eingabezeilen in umgekehrter Reihenfolge an. ZB die EingabeFooBar1 = 0; Fuz__ = 8; Fuz__ / 1
gibt die Liste:Dann filtere ich nach Listenelementen
T
, bei denen=
nicht im letzten Element vonT
(Ausdruck) oder (Zuweisung) das letzte Element, inT
dem der Variablenname enthalten ist, ein Ausdruck ist. Drucken Sie anschließend das letzte Element aller verbleibenden Elemente in einer separaten Zeile aus.quelle
.__.
CJam, 49 Bytes
Probieren Sie es online aus
Der Ansatz hier ist, dass eine Liste nicht zugewiesener Variablen beibehalten wird, während die Eingabezeilen von hinten nach vorne verarbeitet werden:
Wenn die Zeile ein Ausdruck ist, werden alle Variablen im Ausdruck zur Liste hinzugefügt. Tatsächlich werden in der Implementierung alle Token zur Liste hinzugefügt, da Code gespart wird und Zahlen und Operatoren in der Liste keinen Schaden anrichten.
Wenn es sich bei der Zeile um eine Zuweisung handelt, wird geprüft, ob der zugewiesene Variablenname in der Liste enthalten ist. Ist dies der Fall, wird die Zuweisung akzeptiert und der Variablenname aus der Liste entfernt. Andernfalls wird die Zuordnung übersprungen.
Erklärung:
quelle
Python 2,
270267 BytesEinzug ist: 1. Leerzeichen 2. Tab
3 Bytes gespart dank @Kamehameha!
quelle
print ''.join
undin
inin [n
kann entfernt werden.tab
anstelle des doppelten Leerzeichens nach derexcept
Zeile ein verwenden und ein Byte speichern.R 144
woher
L
ist eine Zeile von der Eingabe (beginnend von der letzten)W
sind die Symbole (Variablen, Operatoren, Zahlen) in einer ZeileR
ist ein Vektor von Symbolen, die gedruckt werden. Es enthält Variablen, deren Zuordnung erforderlich ist.Q
ist der Vektor der Zeilen in der Ausgabequelle
scan(what="",sep="\n")
mitscan(,"",sep="\n")
. Möglicherweise können Sie das genanntesep
Argument auch durch das entsprechende Positionsäquivalent ersetzen, aber ich kann mich nicht erinnern, wohin das Komma führen würde.JavaScript (ES6) 164
177Bei Verwendung von Vorlagenzeichenfolgen sind alle Zeilenumbrüche von Bedeutung und werden gezählt.
Testlauf des Snippets in FireFox (für die ES6-Kompatibilität einschließlich Pfeilfunktionen erforderlich)
quelle
ungolfed
Teil dient nur zur Erläuterung. DerTEST
Teil ist ... ähm nur erraten ...JavaScript ES6,
7975118 BytesSagen Sie mir, wenn dies für einen Fall nicht funktioniert. Anregungen zum Golfen sind willkommen.
Erläuterung
Auf Safari Nightly getestet. Firefox-freundliche Version:
Sie können in babeljs vorbeischauen , um eine ES5-Version zu erhalten.
quelle
Haskell, 187 Bytes
Verwenden
d
.quelle