Lidar com equações na ausência de um bom editor de equações é confuso e desagradável. Por exemplo, se eu quisesse expressar uma integral e sua solução, ela seria algo como isto:
Integral [x ^ 3 e ^ (- mx ^ 2 b / 2), dx] = - ((2 + b m x ^ 2) / (b ^ 2 * e ^ ((b m x ^ 2) / 2) * m ^ 2))
Em integrals.wolfram.com , isso é chamado de "formulário de entrada". Ninguém gosta de ver uma equação em "formulário de entrada". A maneira ideal de visualizar esta equação seria:
(Wolfram chama isso de "forma tradicional")
Para esse codegolf, escreva um programa que terá alguma equação na "forma de entrada" como entrada e visualize essa equação em uma representação ascii da "forma tradicional". Portanto, neste exemplo, podemos obter algo parecido com isto:
/\ 3
| x
| ------------ dx =
| 2
\/ (m x b)/2
e
2
2 + b m x
-(-----------------)
2
2 (b m x )/2 2
b e m
Requisitos:
- Não embaralhe, simplifique ou reorganize a entrada de forma alguma. Renderize-o exatamente da mesma forma que foi descrita pela entrada.
- Suporte as quatro operações matemáticas básicas (+, -, *, /). Quando não multiplicar dois números adjacentes, o símbolo * está implícito e deve ser omitido.
- O suporte à integração (como mostrado no exemplo acima) não é necessário. Ser capaz de dar suporte à entrada com funções como [...] Integrate ou Sqrt [...] é um bônus.
- Poderes de suporte, como mostrado no exemplo acima (a enésima raiz pode ser modelada aumentando-a para a enésima potência).
- Parênteses redundantes (como aqueles ao redor do denominador e numerador da fração grande no exemplo acima) devem ser omitidos.
- A expressão no denominador e numerador de uma fração deve estar centralizada acima e abaixo da linha de divisão horizontal.
- Você pode escolher se deseja ou não iniciar uma nova linha após um sinal de igual. No exemplo acima, uma nova linha é iniciada.
- A ordem das operações deve ser exatamente a mesma na saída e na entrada.
Alguns exemplos de entrada e saída associada para testar sua solução:
Entrada:
1/2 + 1/3 + 1/4
Resultado:
1 1 1
- + - + -
2 3 4
Entrada:
3x^2 / 2 + x^3^3
Resultado:
2 3
3 x 3
---- + x
2
Entrada:
(2 / x) / (5 / 4^2)
Resultado:
2
-
x
--
5
--
2
4
Entrada:
(3x^2)^(1/2)
Resultado:
2 1/2
(3 x )
Respostas:
Caracteres Python 2, 1666
O layout é realmente muito fácil - é a análise da entrada que é uma dor real. Ainda não tenho certeza se está completamente correto.
Para a grande entrada na pergunta, recebo:
Aqui estão alguns casos de teste mais complicados:
Esse último está errado, algum erro de precedência no analisador.
fonte