Змагання
Ви власник дивовижної послуги під назвою Coyote Beta , яка магічно відповідає на математичні запитання, які її користувачі надсилають через Інтернет.
Але виявляється, пропускна здатність дорога. У вас є два варіанти: або створити " Coyote Beta Pro", або знайти спосіб вирішити це. Зовсім недавно хтось запитав (x + 2)
. Не вдалося клієнту надіслати x+2
, і користувач не побачив би різниці?
Завдання
Ваше завдання - «мінімізувати» математичні вирази. З огляду на вхідний вираз, ви повинні позбутися пробілів і дужок, поки воно не подасть мінімальне представлення того ж вводу. Дужки навколо асоціативних операцій не потрібно зберігати.
Єдині оператори , наведені тут +
, -
, *
, /
, і ^
(зведення в ступінь), зі стандартним математичним асоціативності і пріоритеті. Єдиним пробілом, вказаним у введенні, будуть фактичні символи пробілу.
Зразок вводу / виводу
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
Оцінка балів
Для введення / виводу можна використовувати будь-який бажаний метод. Виграє найменша програма в байтах.
Точні шматочки
Експоненціація є правильним асоціативним, а також слід за стандартним математичним пріоритетом (найвищим). Допустимим числовим літералом є /[0-9]+/
, а допустимим є літеральна змінна /[a-z]+/
. Одинарна літеральна змінна являє собою єдине значення, навіть коли її довжина символів перевищує 1.
Мається на увазі те, що «круглі дужки навколо асоціативних операцій не потрібно зберігати» - це те, що висновок повинен складатися з виразу, що призводить до ідентичного дерева розбору, за винятком того, що асоціативні операції можуть бути переставлені.
/[a-z]+/
, це означає, що множення на поєднання як би ab
заборонено?
2+(3+4)
щоб вас змінили 2+3+4
, правда? Це змінює дерево розбору.
x^(y/2)=x^y/2
; експоненцірованіе має більш високий пріоритет порядку, отже, x^y/2=(x^y)/2
.
Prompt X:expr(X)
в TI-BASIC, але ви не можете спростити :(