Sei trasportato in un universo parallelo in cui le persone scrivono a mano equazioni matematiche sui computer come arte ASCII. Come dipendente da LaTeX, questo è totalmente inaccettabile e dovresti automatizzare un po 'questo processo.
Il tuo obiettivo è quello di scrivere un programma che genera una versione ASCII di un'equazione inserita come comando matematico LaTeX.
Comandi LaTeX obbligatori da supportare
Somma: il comando LaTeX per una somma è
\sum_{lower bound}^{upper bound}
La cifra ASCII che devi usare per le somme è:
upper bound ___ \ ` /__, lower bound
Prodotto: il comando LaTeX per un prodotto è
\prod_{lower bound}^{upper bound}
La cifra ASCII che devi usare per i prodotti è:
upper bound ____ | | | | lower bound
Frazione: il comando LaTeX per le frazioni è
\frac{numerator}{denominator}
La cifra ASCII che devi usare per le frazioni è:
numerator ----------- denominator
Tutto ciò che non è uno di quei tre comandi viene visualizzato così com'è. Ad esempio, \sum{i=3}^{e^10}\frac{3x+5}{2}
dovrebbe essere visualizzato come
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
ingressi
L'input è un comando LaTeX passato come stringa (o equivalente della tua lingua alle stringhe). I comandi LaTeX possono essere nidificati, ad esempio \frac{\frac{1}{2}}{3}
è un input valido. Gli input dovrebbero essere sempre corretti (non è necessario controllare la sintassi di LaTeX nel codice). Gli input saranno composti solo dai tre comandi LaTeX presentati sopra e da "testo" che non è necessario formattare.
I comandi LaTeX verranno sempre con la sintassi presentata sopra, ovvero somme e prodotti avranno sempre limiti superiore e inferiore (anche se possono essere vuoti) e ci saranno sempre un numeratore e un denominatore per le frazioni.
Partiamo dal presupposto che i limiti di somme e prodotti sono lunghi al massimo 4 caratteri (= la larghezza della somma e dei simboli del prodotto), quindi non devi preoccuparti di possibili problemi di sovrapposizione. Per ragioni simili, supponiamo che i limiti siano solo "testo" e non saranno mai comandi LaTeX, ad esempio \sum_{\sum_{1}^{2}}^{1}
non è un input valido.
Uscite
L'output del tuo programma è la rappresentazione ASCII del comando LaTeX che ti è stato dato come input.
Il programma deve tenere conto dell'allineamento orizzontale: ad esempio, i limiti della somma o del prodotto devono essere allineati orizzontalmente con il simbolo della somma o del prodotto (che sono entrambi di 4 caratteri). Se il limite ha un numero dispari di caratteri, non importa se si tratta di un carattere a destra oa sinistra del centro, a seconda di quale va bene. La linea della frazione deve essere lunga quanto il numeratore o il denominatore, a seconda di quale sia il più lungo.
Il programma deve tenere conto dell'allineamento verticale: ad esempio, \frac{\frac{1}{2}}{3} = \frac{1}{6}
deve essere visualizzato come
1
-
2 1
- = -
3 6
Per somme e prodotti, poiché i simboli sono alti 4 caratteri, si presume che il centro verticale sia la seconda riga dall'alto.
Si presume che la spaziatura orizzontale sia corretta nell'input dato, cioè gli spazi nell'input dovrebbero essere visualizzati nell'output.
Casi test
Ingresso
abc = 2
Produzione
abc = 2
Ingresso
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Produzione
+inf ___ 1 e = \ ` -- /__, n! n=0
Ingresso
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Produzione
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Ingresso
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Produzione
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Ingresso
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Produzione
prod sum ___ ---- = \ ` sum prod /__, frac
punteggio
Questo è code-golf , quindi vince il codice più corto.