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 abh
Symbol 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.
ab*c
es sich um eine falsche Analyse handelt, da diesc
keine zulässige Variable ist.a*aaa aaa*a
und nichtab*c c*ab
Antworten:
Pyth, 18 Zeichen
Diese Lösung wurde aus meiner Interpreting Fish- Lösung übernommen. Die Probleme sind eigentlich sehr ähnlich.
Erwartet Eingabe als solche:
Gibt Ausgabe wie folgt:
Probieren Sie es hier aus.
sm^Qkhlz
: Erzeugt alle Folgen von Variablen, die bis zur Länge der Eingabezeichenfolge die Anzahl der Variablen enthalten.fqzsT
: Filtert die variablen Sequenzen heraus, die mit der Eingabezeichenfolge übereinstimmenmj\*d
: Fügt das*
Symbol ein und druckt.quelle
Python 2 -
14794 BytesDies definiert eine Funktion
R
, die wie folgt verwendet werden soll:Druckt die Ausgabe wie folgt:
quelle
JavaScript (ES6) 111
Angepasst an meine "Fisch" -Antwort besteht der Hauptunterschied darin, alle Lösungen zu finden, nicht nur die erste.
Die Ausgabe wird auf der Konsole gedruckt. Das Funktionsergebnis hat keine Bedeutung und muss verworfen werden.
Test In Firefox / Firebug - Konsole
quelle