Tratar las ecuaciones en ausencia de un buen editor de ecuaciones es desordenado y desagradable. Por ejemplo, si quisiera expresar una integral y su solución, podría verse así:
Integral [x ^ 3 e ^ (- mx ^ 2 b / 2), dx] = - ((2 + b m x ^ 2) / (b ^ 2 * e ^ ((b m x ^ 2) / 2) * m ^ 2))
En integrals.wolfram.com , esto se llama "formulario de entrada". A nadie le gusta ver una ecuación en "forma de entrada". La forma ideal de visualizar esta ecuación sería:
(Wolfram llama a esto "forma tradicional")
Para este codegolf, escriba un programa que tome alguna ecuación en "forma de entrada" como entrada y visualice esa ecuación en una representación ascii de "forma tradicional". Entonces, para este ejemplo, podríamos obtener algo como esto:
/\ 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:
- No baraje, simplifique ni reorganice la entrada de ninguna manera. Preséntelo exactamente de la misma forma en que lo describió la entrada.
- Admite las cuatro operaciones matemáticas básicas (+, -, *, /). Cuando no se multiplican dos números adyacentes, el símbolo * está implícito y debe omitirse.
- No se requiere soporte para la integración (como se muestra en el ejemplo anterior) . Poder admitir entradas con funciones como Integrar [...] o Sqrt [...] es una ventaja.
- Potencias de soporte como se muestra en el ejemplo anterior (la raíz enésima se puede modelar elevando a la potencia enésima).
- Los paréntesis redundantes (como los que rodean al denomentador y el numerador de la fracción grande en el ejemplo anterior) deben omitirse.
- La expresión en el denominador y numerador de una fracción debe estar centrada encima y debajo de la línea de división horizontal.
- Puede elegir iniciar o no una nueva línea después de un signo igual. En el ejemplo anterior, se inicia una nueva línea.
- El orden de las operaciones debe ser exactamente el mismo en la salida que en la entrada.
Algunos ejemplos de entrada y salida asociada para probar su solución:
Entrada:
1/2 + 1/3 + 1/4
Salida:
1 1 1
- + - + -
2 3 4
Entrada:
3x^2 / 2 + x^3^3
Salida:
2 3
3 x 3
---- + x
2
Entrada:
(2 / x) / (5 / 4^2)
Salida:
2
-
x
--
5
--
2
4
Entrada:
(3x^2)^(1/2)
Salida:
2 1/2
(3 x )
Respuestas:
Python 2, 1666 caracteres
El diseño en realidad es bastante fácil: el análisis de la entrada es un verdadero problema. Todavía no estoy seguro de que sea completamente correcto.
Para la gran entrada en la pregunta, obtengo:
Aquí hay algunos casos de prueba más difíciles:
Ese último está mal, algún error de precedencia en el analizador.
fuente