Usted es transportado en un universo paralelo donde las personas escriben ecuaciones matemáticas en computadoras como arte ASCII a mano. Como adicto a LaTeX, esto es totalmente inaceptable, y debería automatizar este proceso de alguna manera.
Su objetivo es escribir un programa que genere una versión ASCII de una ecuación incorporada como un comando matemático LaTeX.
Comandos obligatorios de LaTeX para admitir
Suma: el comando LaTeX para una suma es
\sum_{lower bound}^{upper bound}
La cifra ASCII que debe usar para sumas es:
upper bound ___ \ ` /__, lower bound
Producto: el comando LaTeX para un producto es
\prod_{lower bound}^{upper bound}
La cifra ASCII que debe usar para los productos es:
upper bound ____ | | | | lower bound
Fracción: el comando LaTeX para fracciones es
\frac{numerator}{denominator}
La cifra ASCII que debes usar para las fracciones es:
numerator ----------- denominator
Todo lo que no sea uno de esos tres comandos se muestra tal cual. Por ejemplo, \sum{i=3}^{e^10}\frac{3x+5}{2}
debe mostrarse como
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Entradas
La entrada es un comando LaTeX pasado como una cadena (o el equivalente de su idioma a las cadenas). Los comandos LaTeX se pueden anidar, por ejemplo, \frac{\frac{1}{2}}{3}
es una entrada válida. Se supone que las entradas siempre son correctas (no es necesario verificar la sintaxis de LaTeX en su código). Las entradas solo consistirán en los tres comandos LaTeX presentados anteriormente y el 'texto' que no necesitará formatear.
Los comandos LaTeX siempre vendrán con la sintaxis presentada anteriormente, es decir, las sumas y los productos siempre tendrán límites superior e inferior (aunque pueden estar vacíos) y siempre habrá un numerador y un denominador para las fracciones.
Suponemos que los límites de las sumas y los productos tienen una longitud máxima de 4 caracteres (= el ancho de los símbolos de suma y producto), por lo que no tiene que preocuparse por posibles problemas de superposición. Por razones similares, asumimos que los límites son solo 'texto' y nunca serán comandos LaTeX, por ejemplo, \sum_{\sum_{1}^{2}}^{1}
no es una entrada válida.
Salidas
La salida de su programa es la representación ASCII del comando LaTeX que recibió como entrada.
Su programa debe tener en cuenta la alineación horizontal: por ejemplo, los límites de la suma o el producto deben estar alineados horizontalmente con la suma o el símbolo del producto (que tienen 4 caracteres de ancho). Si el límite tiene un número impar de caracteres, no importa si está un carácter a la derecha o a la izquierda del centro, lo que esté bien. La línea de la fracción debe ser tan larga como el numerador o el denominador, el que sea más largo.
Su programa debe tener en cuenta la alineación vertical: por ejemplo, \frac{\frac{1}{2}}{3} = \frac{1}{6}
debe mostrarse como
1
-
2 1
- = -
3 6
Para sumas y productos, dado que los símbolos tienen 4 caracteres de alto, se supone que el centro vertical es la segunda línea desde la parte superior.
Se supone que el espaciado horizontal es correcto en la entrada dada, es decir, los espacios en la entrada deben mostrarse en la salida.
Casos de prueba
Entrada
abc = 2
Salida
abc = 2
Entrada
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Salida
+inf ___ 1 e = \ ` -- /__, n! n=0
Entrada
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Salida
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Entrada
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Salida
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Entrada
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Salida
prod sum ___ ---- = \ ` sum prod /__, frac
Tanteo
Este es el código de golf , por lo que gana el código más corto.
Respuestas:
Python 2,
656627618 bytesToma entrada en STDIN y escribe la salida en STDOUT.
El programa asume que no hay otra secuencia de control que
\frac
,\sum
o\prod
aparece en la entrada (es decir, no se mostrará como texto normal) y eso~
tampoco aparece ( tiene un significado especial en modo matemático de todos modos). por otra parte, el programa hace apoyar fórmulas arbitrarias como límites para\sum
y\prod
.Explicación
¡Funciona igual que TeX! (bueno, más o menos ...) Cada subformula (comenzando desde caracteres individuales y construyendo hasta fórmulas más complejas) se convierte en un cuadro, con un ancho, alto y profundidad asociados (línea de base). Las cajas de fórmulas más simples se combinan en cajas más grandes para formar fórmulas complejas, y así sucesivamente. El contenido de cada cuadro se representa como una lista de pares de posición / carácter, en relación con la esquina superior izquierda del cuadro; cuando las cajas se combinan en una caja más grande, las posiciones se compensan de acuerdo con las posiciones relativas de las cajas más pequeñas dentro de la más grande, y las listas se concatenan.
Finalmente, terminamos con un cuadro de nivel superior, que se convierte en una forma imprimible.
Para darle un poco de sabor, la siguiente versión también admite raíces cuadradas:
Mostrar fragmento de código
Ejemplos:
\frac{-b +- \sqrt{b^2 - 4ac}}{2a}
|v| = \sqrt{ \sum_{i}^{} v[i]^2 }
fuente
\prod_{i=1}^{\sum_{azededzeda}^{k}} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Intenté correr y superó todo correctamente sin superposición, a pesar de que no era necesario. ¡Agradable!LaTeX,
540532 caracteresDescargo de responsabilidad: esto no es perfecto y podría decirse que no cuenta como una respuesta válida.
Algo de ayuda de @Fatalize, vea los comentarios para más detalles.
Prueba:
Entrada:
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Salida:
Como puede ver, la salida no sigue exactamente las especificaciones. Esto puede descalificar mi respuesta, pero sigo pensando que vale la pena publicarlo.
Escribí esto en sharelatex.com. Puedes jugar con eso aquí .
fuente
\newcommand{\frac}[2]{\mathop{\xleaders\hbox{-}\hfill\kern0pt}\limits^{#1}_{#2}}
, agregando\DeclareMathSizes{10}{10}{10}{10}
después (para evitar que LaTeX reduzca los numeradores y denominadores), y agregando\kern-1ex
antes\displaystyle
en su suma y definición de producto.