Quylthulgは、Chris Presseyによる言語で、panfixと呼ばれるものを使用して中置表記法の問題を解決しようとします。
postfixと同様に、panfixは、デフォルトの演算子の優先順位をオーバーライドするために、括弧などの不可解な仕掛けを展開する必要はありません。同時に、パンフィックスは、インフィックスと同じ順序と方法で用語を指定することを可能にします。
接頭辞または接尾辞の曖昧さとともに、挿入記法の便利さをどのように取得しますか?もちろん、3つすべてを使用してください!
=y=+*3*x*+1+=
より正式には、letを+
演算子、and a
をb
式にします。その後(a+b)
、有効な(括弧で囲まれた)中置式であり、その式のパンフィックス表現はです+a+b+
。ここで、並置は連結を表します。
あなたの目標は、パンフィックス文字列を取得し、それを完全に括弧で囲まれたインフィックスに変換することです:
(y=((3*x)+1))
簡単にするために、次の変更を行います。
- 演算子は2つの一意の文字のみで構成できます(いずれかを選択できますが、ここでは
*
andを使用します+
)。 - リテラルは1つだけで、別の個別の文字で構成されます(いずれかを選択できますが、ここではを使用します
_
)。 - 入力は整形式のパンフィックス式になります。
以下のために複雑、私たちは以下の変更を行います:
- 演算子は、1つだけでなく、任意の正数の文字で構成できます。
これは、文字列の残りの部分を見ることなく、演算子文字の特定の部分文字列がどのように分割されるかを必ずしも決定できないため、挑戦をより困難にします。
これは、@ user202729の好意によるチャレンジのリファレンス実装です。
テストケース
format: input -> output
+*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_)))
**++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_)))
***_**_***_* -> ((_**_)*_)
+_+_+ -> (_+_)
*+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_)
*++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_)
+**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_)))
+**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_)))
+*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_)))
**_**_**_*_****_* -> ((_*(_*(_*_)))*_)
私はこのプログラムを使用して、このチャレンジの挿入文字列を生成しました(パンフィックスへの変換は簡単ですが、逆変換は簡単ではありません)。
**_**_**_*_****_*
。私がテストした答えはすべてこれに失敗しました。
(_ + _)
か?