ジャックはCプログラミング言語が好きですがV=a*b*h;
、値を乗算するような式を書くのは嫌いです。
V=abh;
代わりに彼は書きたいのですが、定義されabh
ているのでシンボルが未定義であることについてコンパイラがうめき声を出してint a, b, h;
、乗算を推定できるようにする必要がありますか?
現在のスコープで定義されている変数のセットがわかっている場合、単一の乗算項を解読するパーサーの実装を支援します。
簡単にするために、(のように2*a*b
)数値による乗算は考慮されず、変数のみが表示されます。
入力は、正規表現を満たす乗算項Tです。
[a-zA-Z_][a-zA-Z_0-9]*
変数セットZ。
変数セットZに対する項Tの解析Pは、次の条件を満たす文字列です。
*
Pからのすべての出現を削除した後、Tを受け取り、- Zからの変数名であるか、Zからの適切な変数名を1
*
文字で分割して構成されています。
ソリューションは、用語のすべての解析を出力する必要があります。
サンプル:
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
入力(変数のリストと用語)は、言語に適した方法で提供されます。
出力は適切な形式(1行に1つの構文解析またはコンマ区切りのリストなど)にすることができますが、明確で、読みやすくする必要があります。
用語を解析できない場合は、空の出力でも問題ありません(例では、わかりやすくするために「-」を使用しています)。
これはコードゴルフなので、最短のコードが勝ちます。
a*aaa aaa*a
でないのかab*c c*ab
ab*c
ため、私は誤った解析であると考えていc
ます。