您在一个平行的世界中被运送,人们在计算机上以人工方式将数学方程式编写为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
不属于这三个命令之一的所有内容均按原样显示。例如,\sum{i=3}^{e^10}\frac{3x+5}{2}
应显示为
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
输入项
输入是作为字符串(或您的语言等效于字符串)传递的LaTeX命令。LaTeX命令可以嵌套,例如\frac{\frac{1}{2}}{3}
是有效输入。输入应该总是正确的(无需在代码中检查LaTeX的语法)。输入仅包含上面显示的三个LaTeX命令和不需要格式化的“文本”。
LaTeX命令将始终具有上述语法,即,总和和乘积始终具有上限和下限(尽管它们可以为空),并且始终存在分数的分子和分母。
我们假定求和与乘积的边界最多为4个字符长(=和与乘积符号的宽度),因此您不必担心可能出现的重叠问题。出于类似的原因,我们假设边界只是“文本”,绝不会是LaTeX命令,例如\sum_{\sum_{1}^{2}}^{1}
不是有效输入。
产出
程序的输出是作为输入提供的LaTeX命令的ASCII表示形式。
您的程序必须考虑水平对齐:例如,总和或乘积的边界必须与总和或乘积符号(均为4个字符宽)水平对齐。如果边界中的字符数为奇数,则该字符距中心的右侧或左侧是否相距一个字符都没有关系,以较合适的为准。分数线必须与分子或分母一样长,以最长者为准。
您的程序必须考虑垂直对齐:例如,\frac{\frac{1}{2}}{3} = \frac{1}{6}
应显示为
1
-
2 1
- = -
3 6
对于总和和乘积,由于符号的高度为4个字符,因此假定垂直中心为从顶部起第二行。
假定在给定输入中水平间距是正确的,即输入中的空格应显示在输出中。
测试用例
输入值
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
计分
这是代码高尔夫球,因此最短的代码获胜。