Sie werden in ein Paralleluniversum transportiert, in dem Menschen mathematische Gleichungen als ASCII-Kunst von Hand auf Computern schreiben. Als LaTeX-Süchtiger ist dies völlig inakzeptabel, und Sie sollten diesen Prozess etwas automatisieren.
Ihr Ziel ist es, ein Programm zu schreiben, das eine ASCII-Version einer als LaTeX-Mathematikbefehl eingegebenen Gleichung ausgibt.
Obligatorische zu unterstützende LaTeX-Befehle
Summe: Der LaTeX-Befehl für eine Summe lautet
\sum_{lower bound}^{upper bound}
Die ASCII-Zahl, die Sie für Summen verwenden müssen, lautet:
upper bound ___ \ ` /__, lower bound
Produkt: Der LaTeX-Befehl für ein Produkt lautet
\prod_{lower bound}^{upper bound}
Die ASCII-Zahl, die Sie für Produkte verwenden müssen, lautet:
upper bound ____ | | | | lower bound
Bruch: Der LaTeX-Befehl für Brüche lautet
\frac{numerator}{denominator}
Die ASCII-Zahl, die Sie für Brüche verwenden müssen, lautet:
numerator ----------- denominator
Alles, was nicht zu diesen drei Befehlen gehört, wird so angezeigt, wie es ist. Beispielsweise \sum{i=3}^{e^10}\frac{3x+5}{2}
sollte angezeigt werden als
e^10
___ 3x+5
\ ` ----
/__, 2
i=3
Eingänge
Die Eingabe ist ein LaTeX-Befehl, der als Zeichenfolge übergeben wird (oder Ihre Sprache entspricht Zeichenfolgen). LaTeX-Befehle können verschachtelt sein, zum Beispiel \frac{\frac{1}{2}}{3}
ist eine gültige Eingabe. Eingaben sollten immer korrekt sein (es ist nicht erforderlich, die LaTeX-Syntax in Ihrem Code zu überprüfen). Eingaben bestehen nur aus den drei oben aufgeführten LaTeX-Befehlen und 'Text', den Sie nicht formatieren müssen.
LaTeX-Befehle werden immer mit der oben angegebenen Syntax geliefert, dh Summen und Produkte haben immer obere und untere Schranken (obwohl sie leer sein können) und es wird immer einen Zähler und Nenner für Brüche geben.
Wir gehen davon aus, dass die Grenzen von Summen und Produkten höchstens 4 Zeichen lang sind (= die Breite der Summen- und Produktsymbole), damit Sie sich nicht über mögliche Überlappungsprobleme Gedanken machen müssen. Aus ähnlichen Gründen nehmen wir an, dass die Grenzen nur 'Text' sind und niemals LaTeX-Befehle sein werden, z. B. \sum_{\sum_{1}^{2}}^{1}
ist keine gültige Eingabe.
Ausgänge
Die Ausgabe Ihres Programms ist die ASCII-Darstellung des LaTeX-Befehls, den Sie als Eingabe erhalten haben.
Ihr Programm muss die horizontale Ausrichtung berücksichtigen: Beispielsweise müssen die Grenzen der Summe oder des Produkts horizontal an dem Symbol für die Summe oder das Produkt ausgerichtet sein (beide sind 4 Zeichen breit). Wenn die Grenze eine ungerade Anzahl von Zeichen enthält, spielt es keine Rolle, ob es sich um ein Zeichen rechts oder links von der Mitte handelt, je nachdem, was in Ordnung ist. Die Bruchlinie muss so lang sein wie der Zähler oder der Nenner, je nachdem, welcher der längste ist.
Ihr Programm muss die vertikale Ausrichtung berücksichtigen: Beispielsweise \frac{\frac{1}{2}}{3} = \frac{1}{6}
sollte angezeigt werden als
1
-
2 1
- = -
3 6
Bei Summen und Produkten wird angenommen, dass die vertikale Mitte die zweite Zeile von oben ist, da die Symbole 4 Zeichen hoch sind.
Der horizontale Abstand wird in der angegebenen Eingabe als korrekt angenommen, dh die Leerzeichen in der Eingabe sollten in der Ausgabe angezeigt werden.
Testfälle
Eingang
abc = 2
Ausgabe
abc = 2
Eingang
e = \sum_{n=0}^{+inf} \frac{1}{n!}
Ausgabe
+inf ___ 1 e = \ ` -- /__, n! n=0
Eingang
e^x = 1 + \frac{x}{1 - \frac{x}{2 + x - ...}}
Ausgabe
x e^x = 1 + --------------- x 1 - ----------- 2 + x - ...
Eingang
\prod_{i=1}^{n} \frac{\sum_{j=0}^{m} 2j}{i + 1}
Ausgabe
m ___ \ ` 2j n /__, ____ j=0 | | ------- | | i + 1 i=1
Eingang
\frac{sum}{prod} = \sum_{frac}^{prod} sum
Ausgabe
prod sum ___ ---- = \ ` sum prod /__, frac
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code.