あなたは人々がASCIIアートとしてコンピューター上で数学の方程式を手で書く平行宇宙に運ばれます。LaTeXの常習者として、これはまったく受け入れられません。このプロセスを多少自動化する必要があります。
あなたの目標は、LaTeX数学コマンドとして入力された方程式のASCIIバージョンを出力するプログラムを書くことです。
サポートする必須のLaTeXコマンド
合計:合計のLaTeXコマンドは
\sum_{lower bound}^{upper bound}
合計に使用する必要があるASCII数字は次のとおりです。
upper bound ___ \ ` /__, lower bound
製品:製品のLaTeXコマンドは
\prod_{lower bound}^{upper bound}
製品に使用しなければならないASCII図は次のとおりです。
upper bound ____ | | | | lower bound
分数:分数のLaTeXコマンドは
\frac{numerator}{denominator}
分数に使用しなければならないASCII図は次のとおりです。
numerator ----------- denominator
これらの3つのコマンドのいずれでもないものはすべてそのまま表示されます。例えば、\sum{i=3}^{e^10}\frac{3x+5}{2}
のように表示されなければなりません
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
入力
入力は、文字列として渡されるLaTeXコマンドです(または言語の文字列に相当するもの)。LaTeXコマンドはネストでき\frac{\frac{1}{2}}{3}
ます。たとえば、有効な入力です。入力は常に正しいはずです(コード内でLaTeXの構文をチェックする必要はありません)。入力は、上記の3つのLaTeXコマンドと、フォーマットする必要のない「テキスト」のみで構成されます。
LaTeXコマンドは常に上記の構文を使用します。つまり、合計と積には常に上限と下限がありますが(空でもかまいません)、分数には分子と分母が常にあります。
合計と製品の境界は最大で4文字(=合計と製品シンボルの幅)であると想定しているため、重複の問題を心配する必要はありません。同様の理由で、境界は単なる「テキスト」であり、LaTeXコマンドになること\sum_{\sum_{1}^{2}}^{1}
はない、たとえば有効な入力ではないと仮定します。
出力
プログラムの出力は、入力として与えられたLaTeXコマンドのASCII表現です。
プログラムでは、水平方向の配置を考慮する必要があります。たとえば、合計または製品の境界は、合計または製品シンボル(両方とも4文字幅)と水平方向に配置する必要があります。境界の文字数が奇数である場合、中央から1文字右または左のどちらの文字でも問題ありません。分数の行は、分子または分母のどちらか長い方と同じ長さでなければなりません。
プログラムでは、垂直方向の配置を考慮する\frac{\frac{1}{2}}{3} = \frac{1}{6}
必要があります。たとえば、次のように表示する必要があります
1
-
2 1
- = -
3 6
合計と積の場合、シンボルの高さは4文字であるため、垂直方向の中心は上から2番目の行であると想定されます。
水平方向の間隔は、指定された入力で正しいと想定されます。つまり、入力のスペースが出力に表示される必要があります。
テストケース
入力
abc = 2
出力
abc = 2
入力
e = \sum_{n=0}^{+inf} \frac{1}{n!}
出力
+inf ___ 1 e = \ ` -- /__, n! n=0
入力
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
出力
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
入力
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
出力
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
入力
\frac{sum}{prod} = \sum_{frac}^{prod} sum
出力
prod sum ___ ---- = \ ` sum prod /__, frac
得点
これはcode-golfなので、最短のコードが優先されます。