チャレンジ
あなたはCoyote Betaと呼ばれる素晴らしいサービスの所有者です。これは、ユーザーがインターネット経由で送信する数学の質問に魔法のように答えます。
しかし、結局のところ、帯域幅は高価です。「コヨーテベータプロ」を作成するか、これを解決する方法を見つけるかの2つの選択肢があります。つい最近、誰かが質問した(x + 2)
。クライアントはを送信できませんでしたがx+2
、ユーザーには違いはありませんか?
タスク
あなたの仕事は、数式を「縮小」することです。入力式が与えられた場合、同じ入力の最小表現が得られるまで、空白と括弧を削除する必要があります。連想操作を囲む括弧は保持する必要はありません。
ここに与えられた唯一の演算子は+
、-
、*
、/
、および^
標準的な数学結合性と優先順位で、(累乗)。入力で指定される唯一の空白は、実際のスペース文字です。
サンプル入出力
Input | Output
------------|--------------
(2+x) + 3 | 2+x+3
((4+5))*x | (4+5)*x
z^(x+42) | z^(x+42)
x - ((y)+2) | x-(y+2)
(z - y) - x | z-y-x
x^(y^2) | x^y^2
x^2 / z | x^2/z
- (x + 5)+3 | -(x+5)+3
得点
入出力では、任意の優先メソッドを使用できます。バイト単位の最小プログラムが優先されます。
正確なビット
べき乗は正しい連想性であり、標準的な数学の優先順位に従います(最高です)。有効な数値リテラルは/[0-9]+/
です/[a-z]+/
。有効な変数リテラルはです。単一の変数リテラルは、文字の長さが1を超える場合でも単一の値を表します。
「連想操作を囲む括弧を保持する必要がない」とは、連想操作を再配置できることを除いて、出力が同一の解析ツリーになる式で構成されることを意味します。
考え方は、同じ解析ツリーを生成する最小限の同等のステートメントを作成することです。これは、ユーザーがクエリを行ったときにCoyote Betaが視覚的に表示できるようにするためです。
—
TND
有効な変数がの場合、
—
ジョーZ.
/[a-z]+/
並置による乗算ab
は許可されませんか?
2+(3+4)
に変更したい2+3+4
ですか?これにより、解析ツリーが変更されます。
私はその主張に問題がある
—
コナーオブライエン
x^(y/2)=x^y/2
; べき乗の優先順位は、エルゴなどx^y/2=(x^y)/2
です。
ああ、私は
—
DankMemes
Prompt X:expr(X)
TI-BASICで提出するつもりだったが、あなたは単純化できない:(