Der Umgang mit Gleichungen ohne einen guten Gleichungseditor ist chaotisch und unangenehm. Wenn ich zum Beispiel ein Integral und seine Lösung ausdrücken wollte, könnte es ungefähr so aussehen:
Integral [x ^ 3 e ^ (- mx ^ 2 b / 2), dx] = - ((2 + b m x ^ 2) / (b ^ 2 * e ^ ((b m x ^ 2) / 2) * m ^ 2))
Bei integrals.wolfram.com wird dies als "Eingabeformular" bezeichnet. Niemand mag es, eine Gleichung in "Eingabeform" zu sehen. Die ideale Art, diese Gleichung zu visualisieren, wäre:
(Wolfram nennt diese "traditionelle Form")
Schreiben Sie für diesen Codegolf ein Programm, das eine Gleichung in "Eingabeform" als Eingabe verwendet und diese Gleichung in einer ASCII-Darstellung der "traditionellen Form" visualisiert. Für dieses Beispiel könnten wir also so etwas bekommen:
/\ 3
| x
| ------------ dx =
| 2
\/ (m x b)/2
e
2
2 + b m x
-(-----------------)
2
2 (b m x )/2 2
b e m
Bedarf:
- Mischen, vereinfachen oder ordnen Sie die Eingabe in keiner Weise neu. Rendern Sie es in genau der Form, in der es von der Eingabe beschrieben wurde.
- Unterstützen Sie die vier grundlegenden mathematischen Operationen (+, -, *, /). Wenn zwei benachbarte Zahlen nicht multipliziert werden, ist das Symbol * impliziert und sollte weggelassen werden.
- Unterstützung für die Integration (wie im obigen Beispiel gezeigt) ist nicht erforderlich. Die Unterstützung von Eingaben mit Funktionen wie [...] Integrieren oder [...] Sqrt ist ein Bonus.
- Unterstützungskräfte wie im obigen Beispiel gezeigt (die n-te Wurzel kann durch Erhöhen auf die 1 / n-te Kraft modelliert werden).
- Redundante Klammern (wie die um den Denomentator und den Zähler des großen Bruchteils im obigen Beispiel) sollten weggelassen werden.
- Der Ausdruck im Nenner und Zähler eines Bruchs sollte über und unter der horizontalen Trennlinie zentriert sein.
- Sie können wählen, ob nach einem Gleichheitszeichen eine neue Zeile beginnen soll oder nicht. Im obigen Beispiel wird eine neue Zeile gestartet.
- Die Reihenfolge der Operationen muss in der Ausgabe genau dieselbe sein wie in der Eingabe.
Einige Beispiele für Eingaben und zugehörige Ausgaben zum Testen Ihrer Lösung:
Eingang:
1/2 + 1/3 + 1/4
Ausgabe:
1 1 1
- + - + -
2 3 4
Eingang:
3x^2 / 2 + x^3^3
Ausgabe:
2 3
3 x 3
---- + x
2
Eingang:
(2 / x) / (5 / 4^2)
Ausgabe:
2
-
x
--
5
--
2
4
Eingang:
(3x^2)^(1/2)
Ausgabe:
2 1/2
(3 x )
Antworten:
Python 2, 1666 Zeichen
Das Layout ist eigentlich ziemlich einfach - es ist das Parsen der Eingabe, das ein königlicher Schmerz ist. Ich bin mir immer noch nicht sicher, ob es völlig richtig ist.
Für den großen Input in der Frage bekomme ich:
Hier sind einige weitere knifflige Testfälle:
Letzteres ist falsch, ein Vorrangfehler im Parser.
quelle