Die Herausforderung
Sie sind der Besitzer eines erstaunlichen Dienstes namens Coyote Beta , der auf magische Weise mathematische Fragen beantwortet, die seine Benutzer über das Internet an ihn senden.
Es stellt sich jedoch heraus, dass Bandbreite teuer ist. Sie haben zwei Möglichkeiten, entweder ein " Coyote Beta Pro" zu erstellen oder einen Weg zu finden, dies zu lösen. Erst kürzlich hat sich jemand erkundigt (x + 2)
. Konnte der Client nicht senden x+2
und der Benutzer würde keinen Unterschied sehen?
Die Aufgabe
Ihre Aufgabe ist es, mathematische Ausdrücke zu "minimieren". Bei einem Eingabeausdruck müssen Sie Leerzeichen und Klammern entfernen, bis eine minimale Darstellung derselben Eingabe vorliegt. Die Klammern um assoziative Operationen müssen nicht beibehalten werden.
Die einzigen Operatoren, die hier angegeben werden +
, -
sind *
, /
und ^
(Exponentiation) mit mathematischer Standardassoziativität und -priorität. Das einzige in der Eingabe angegebene Leerzeichen sind Leerzeichen.
Sample Input / Output
Input | Output
------------|--------------
(2+x) + 3 | 2+x+3
((4+5))*x | (4+5)*x
z^(x+42) | z^(x+42)
x - ((y)+2) | x-(y+2)
(z - y) - x | z-y-x
x^(y^2) | x^y^2
x^2 / z | x^2/z
- (x + 5)+3 | -(x+5)+3
Wertung
Die Eingabe / Ausgabe kann nach einer beliebigen Methode erfolgen. Das kleinste Programm in Bytes gewinnt.
Genaue Bits
Die Potenzierung ist rechtsassoziativ und folgt ebenfalls der mathematischen Rangfolge (wobei sie die höchste ist). Ein gültiges numerisches Literal ist /[0-9]+/
und ein gültiges variables Literal ist /[a-z]+/
. Ein einzelnes Variablenliteral repräsentiert einen einzelnen Wert, auch wenn seine Zeichenlänge länger als 1 ist.
Mit "die Klammern um assoziative Operationen müssen nicht beibehalten werden" ist gemeint, dass die Ausgabe aus einem Ausdruck bestehen sollte, der zu einem identischen Analysebaum führt, mit der Ausnahme, dass assoziative Operationen neu angeordnet werden können.
/[a-z]+/
, bedeutet dies, dass die Multiplikation mit einer Nebeneinanderstellungab
nicht zulässig ist.2+(3+4)
doch geändert werden2+3+4
, oder? Dies ändert den Analysebaum.x^(y/2)=x^y/2
; Potenzierung hat einen höheren Vorrangx^y/2=(x^y)/2
.Prompt X:expr(X)
in TI-BASIC einreichen, aber Sie können nicht vereinfachen :(Antworten:
C #,
523519504 BytesÜberprüfen Sie die In-Code-Kommentare, um zu sehen, wie es funktioniert!
Golf gespielt
Ungolfed
Randnotizen
PS: Wenn Sie einen Tipp haben oder einen Fehler gefunden haben, lassen Sie es mich bitte in den Kommentaren wissen und ich werde versuchen, ihn zu beheben.
quelle
C ++, 284 Bytes
Golf gespielt
Ungolfed
quelle