Jack mag die Programmiersprache C, hasst es aber, Ausdrücke zu schreiben V=a*b*h;
, um die Werte zu multiplizieren.
Er möchte V=abh;stattdessen schreiben , warum sollte der Compiler darüber stöhnen, dass das abhSymbol undefiniert ist, da int a, b, h;es definiert ist, damit wir die Multiplikation ableiten können?
Helfen Sie ihm, einen Parser zu implementieren, der einen einzelnen Multiplikationsterm entschlüsselt, sofern die im aktuellen Bereich definierten Variablen bekannt sind.
Der Einfachheit halber wird das Multiplizieren mit der Zahl (wie in 2*a*b) nicht berücksichtigt, es werden nur Variablen angezeigt.
Die Eingabe ist ein Multiplikationsterm T , der den regulären Ausdruck erfüllt:
[a-zA-Z_][a-zA-Z_0-9]*
und eine variable Menge Z .
Eine Analyse P des Terms T über die Variablensatz Z ist eine Zeichenfolge, die Folgendes erfüllt:
- Nachdem
*wir alle Vorkommen von P entfernt haben, erhalten wir T, - entweder ist ein Variablenname von Z oder besteht aus richtigen Variablennamen von Z, die durch einzelne
*Zeichen aufgeteilt sind.
Die Lösung sollte alle Analysen eines Begriffs drucken.
Stichprobe:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
Die Eingabe (die Liste der Variablen und der Begriff) kann auf jede für die Sprache geeignete Weise bereitgestellt werden.
Die Ausgabe kann in jeder sinnvollen Form erfolgen (eine Analyse pro Zeile oder eine durch Kommas getrennte Liste usw.) - sie sollte jedoch eindeutig und lesbar sein.
Eine leere Ausgabe ist akzeptabel, wenn ein Begriff nicht analysiert werden kann (in den Beispielen habe ich der Übersichtlichkeit halber '-' verwendet).
Dies ist ein Code Golf, also gewinnt der kürzeste Code.
a*aaa aaa*aund nichtab*c c*ab
ab*ces sich um eine falsche Analyse handelt, da diesckeine zulässige Variable ist.