Wyzwanie
Jesteś właścicielem niesamowitej usługi o nazwie Coyote Beta , która w magiczny sposób odpowiada na pytania matematyczne wysyłane do niej przez Internet.
Ale okazuje się, że przepustowość jest droga. Masz dwie możliwości: albo utworzyć „ Coyote Beta Pro”, albo znaleźć sposób na rozwiązanie tego problemu. Niedawno ktoś zapytał (x + 2)
. Czy klient nie mógł wysłać x+2
, a użytkownik nie widziałby różnicy?
Zadanie
Twoim zadaniem jest „zminimalizowanie” wyrażeń matematycznych. Biorąc pod uwagę wyrażenie wejściowe, musisz pozbyć się białych znaków i nawiasów, aż da minimalną reprezentację tego samego wejścia. Nawiasy wokół operacji asocjacyjnych nie muszą być zachowane.
Jedyne operatory podane tutaj są +
, -
, *
, /
, i ^
(potęgowanie), ze standardowym skojarzeń matematycznej i pierwszeństwa. Jedyną białą spacją podaną na wejściu będą rzeczywiste znaki spacji.
Przykładowe wejście / wyjście
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
Punktacja
Wejścia / wyjścia mogą wykorzystywać dowolną preferowaną metodę. Najmniejszy program w bajtach wygrywa.
Dokładne bity
Potęgowanie jest właściwe asocjacyjne, a także zgodne ze standardowym pierwszeństwem matematycznym (będąc najwyższym). Poprawnym literałem liczbowym jest /[0-9]+/
, a poprawnym literałem zmiennym jest /[a-z]+/
. Pojedynczy literał zmiennej reprezentuje pojedynczą wartość, nawet jeśli jego długość znaku jest większa niż 1.
„Nawiasy wokół operacji asocjacyjnych nie muszą być zachowane” oznacza, że dane wyjściowe powinny składać się z wyrażenia, które daje identyczne drzewo analizy, z wyjątkiem tego, że operacje asocjacyjne można zmienić.
/[a-z]+/
, oznacza to pomnożenie przez zestawienie, tak jak ab
niedozwolone?
2+(3+4)
się zmienić 2+3+4
, prawda? To zmienia drzewo analizy.
x^(y/2)=x^y/2
; potęgowanie ma wyższy priorytet zlecenia, ergo x^y/2=(x^y)/2
.
Prompt X:expr(X)
w TI-BASIC, ale nie można uprościć :(