Соревнование
Вы являетесь владельцем удивительного сервиса 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, но вы не можете упростить :(Ответы:
C #,
523519504 байтаПроверьте комментарии в коде, чтобы увидеть, как это работает!
Golfed
Ungolfed
Примечания стороны
PS: Если у вас есть подсказка или вы нашли ошибку, пожалуйста, дайте мне знать в комментариях, и я постараюсь ее исправить (я добавлю заметку об исправлении ошибки с вашим именем;))
источник
C ++, 284 байта
Golfed
Ungolfed
источник