Vous êtes transporté dans un univers parallèle où les gens écrivent manuellement des équations mathématiques sur des ordinateurs en tant qu'art ASCII. En tant que dépendant de LaTeX, cela est totalement inacceptable et vous devriez automatiser un peu ce processus.
Votre objectif est d'écrire un programme qui génère une version ASCII d'une équation saisie en tant que commande mathématique LaTeX.
Commandes LaTeX obligatoires à prendre en charge
Sum: la commande LaTeX pour une somme est
\sum_{lower bound}^{upper bound}
Le chiffre ASCII que vous devez utiliser pour les sommes est:
upper bound ___ \ ` /__, lower bound
Produit: la commande LaTeX pour un produit est
\prod_{lower bound}^{upper bound}
La figure ASCII que vous devez utiliser pour les produits est la suivante:
upper bound ____ | | | | lower bound
Fraction: la commande LaTeX pour les fractions est
\frac{numerator}{denominator}
La figure ASCII que vous devez utiliser pour les fractions est la suivante:
numerator ----------- denominator
Tout ce qui ne fait pas partie de ces trois commandes est affiché tel quel. Par exemple, \sum{i=3}^{e^10}\frac{3x+5}{2}
devrait être affiché comme
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Contributions
L'entrée est une commande LaTeX transmise sous forme de chaîne (ou l'équivalent de votre langue en chaînes). Les commandes LaTeX peuvent être imbriquées, par exemple \frac{\frac{1}{2}}{3}
une entrée valide. Les entrées sont supposées être toujours correctes (inutile de vérifier la syntaxe de LaTeX dans votre code). Les entrées ne seront composées que des trois commandes LaTeX présentées ci-dessus et d'un 'texte' que vous n'aurez pas besoin de formater.
Les commandes LaTeX viendront toujours avec la syntaxe présentée ci-dessus, c'est-à-dire que les sommes et les produits auront toujours des limites supérieure et inférieure (bien qu'ils puissent être vides) et qu'il y aura toujours un numérateur et un dénominateur pour les fractions.
Nous supposons que les limites des sommes et des produits comportent au plus 4 caractères (= la largeur de la somme et les symboles du produit), de sorte que vous n’ayez pas à vous soucier des éventuels problèmes de chevauchement. Pour des raisons similaires, nous supposons que les bornes ne sont que du texte et ne seront jamais des commandes LaTeX. Par exemple, ce \sum_{\sum_{1}^{2}}^{1}
n'est pas une entrée valide.
Les sorties
La sortie de votre programme est la représentation ASCII de la commande LaTeX qui vous a été donnée en entrée.
Votre programme doit prendre en compte l'alignement horizontal: par exemple, les limites de la somme ou du produit doivent être alignées horizontalement avec la somme ou le symbole du produit (tous deux d'une largeur de 4 caractères). Si la limite comporte un nombre impair de caractères, peu importe qu'il s'agisse d'un caractère à gauche ou à droite du centre, celle qui convient le mieux. La ligne de la fraction doit être aussi longue que le numérateur ou le dénominateur, le plus long des deux.
Votre programme doit prendre en compte l’alignement vertical: par exemple, \frac{\frac{1}{2}}{3} = \frac{1}{6}
doit être affiché comme
1
-
2 1
- = -
3 6
Pour les sommes et les produits, puisque les symboles ont 4 caractères de haut, le centre vertical est supposé être la deuxième ligne en partant du haut.
L'espacement horizontal est supposé être correct dans l'entrée donnée, c'est-à-dire que les espaces de l'entrée doivent être affichés dans la sortie.
Cas de test
Contribution
abc = 2
Sortie
abc = 2
Contribution
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Sortie
+inf ___ 1 e = \ ` -- /__, n! n=0
Contribution
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Sortie
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Contribution
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Sortie
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Contribution
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Sortie
prod sum ___ ---- = \ ` sum prod /__, frac
Notation
C'est du code-golf , donc le code le plus court gagne.