Você é transportado em um universo paralelo em que as pessoas escrevem equações matemáticas em computadores como arte ASCII à mão. Como um viciado em LaTeX, isso é totalmente inaceitável, e você deve automatizar um pouco esse processo.
Seu objetivo é escrever um programa que produza uma versão ASCII de uma equação inserida como um comando matemático LaTeX.
Comandos obrigatórios do LaTeX para suportar
Soma: o comando LaTeX para uma soma é
\sum_{lower bound}^{upper bound}
A figura ASCII que você deve usar para somas é:
upper bound ___ \ ` /__, lower bound
Produto: o comando LaTeX para um produto é
\prod_{lower bound}^{upper bound}
A figura ASCII que você deve usar para produtos é:
upper bound ____ | | | | lower bound
Fração: o comando LaTeX para frações é
\frac{numerator}{denominator}
A figura ASCII que você deve usar para frações é:
numerator ----------- denominator
Qualquer coisa que não seja um desses três comandos é exibida como está. Por exemplo, \sum{i=3}^{e^10}\frac{3x+5}{2}
deve ser exibido como
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Entradas
A entrada é um comando do LaTeX passado como uma string (ou o seu idioma é equivalente a strings). Os comandos do LaTeX podem ser aninhados, por exemplo, \frac{\frac{1}{2}}{3}
é uma entrada válida. As entradas devem estar sempre corretas (não é necessário verificar a sintaxe do LaTeX no seu código). As entradas consistirão apenas dos três comandos do LaTeX apresentados acima e do 'texto' que você não precisará formatar.
Os comandos do LaTeX sempre vêm com a sintaxe apresentada acima, ou seja, somas e produtos sempre terão limites superior e inferior (embora possam estar vazios) e sempre haverá um numerador e denominador para frações.
Assumimos que os limites de somas e produtos tenham no máximo 4 caracteres (= a largura da soma e dos símbolos do produto), para que você não precise se preocupar com possíveis problemas de sobreposição. Por razões semelhantes, assumimos que os limites são apenas 'texto' e nunca serão comandos do LaTeX; por exemplo, \sum_{\sum_{1}^{2}}^{1}
não é uma entrada válida.
Saídas
A saída do seu programa é a representação ASCII do comando LaTeX que você recebeu como entrada.
Seu programa deve levar em consideração o alinhamento horizontal: por exemplo, os limites da soma ou do produto devem ser alinhados horizontalmente com o símbolo da soma ou do produto (com 4 caracteres de largura). Se o limite tiver um número ímpar de caracteres, não importa se é um caractere à direita ou à esquerda do centro, o que for adequado. A linha da fração deve ter o tamanho do numerador ou do denominador, o que for maior.
Seu programa deve levar em consideração o alinhamento vertical: por exemplo, \frac{\frac{1}{2}}{3} = \frac{1}{6}
deve ser exibido como
1
-
2 1
- = -
3 6
Para somas e produtos, como os símbolos têm 4 caracteres, o centro vertical é considerado a segunda linha do topo.
O espaçamento horizontal é considerado correto na entrada fornecida, ou seja, os espaços na entrada devem ser exibidos na saída.
Casos de teste
Entrada
abc = 2
Saída
abc = 2
Entrada
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Saída
+inf ___ 1 e = \ ` -- /__, n! n=0
Entrada
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Saída
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Entrada
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Saída
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Entrada
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Saída
prod sum ___ ---- = \ ` sum prod /__, frac
Pontuação
Isso é código-golfe , então o código mais curto vence.