Порядок операций, PEMDAS, является основным правилом в математике, говорящим нам, какие операции порядка должны быть выполнены:
«Скобки, экспоненты, умножение и деление, а также сложение и вычитание»
Проблема в том, что PEMDAS не очень универсален! Что делать, если вы хотите сделать это в другом порядке? Мы не будем связываться с круглыми скобками, поэтому мы держим их там, где они есть (сначала).
Создайте программу, которая принимает два аргумента:
- Строка, указывающая, в каком порядке должны следовать операции. Вот некоторые примеры
"DAMES"
,"SAD, ME"
,"ME SAD"
,"MEADS"
. Да, с пробелами все в порядке, так как порядок легче запомнить.- Следующие предложения в чате: Поддержка пробелов и запятых теперь не является обязательной.
- Если одна из букв отсутствует или есть дополнительные буквы, которых не должно быть, вы можете считать введенные данные недействительными и обрабатывать их по своему усмотрению.
- Строка или выражение, содержащее выражение, которое должно быть оценено.
Возвращает результат выражения в виде десятичного числа или целого числа. Если ответ не является целым числом, он должен быть возвращен как десятичное число.
Правила:
- Можно объединить два входных аргумента в один, если это проще на вашем языке.
- Это не обязательно должна быть строка, но в ней должны быть буквы. Вы не можете заменить сложение на 1, деление на 2 и т. Д.
- Вы можете выбрать, какой вход является первым.
- Выражение вычисляется
справа налевослева направо. (Изменение правила. Принимаются любые постеры, подающие первые 12 часов с обратным ходом). - Операции использовать символы:
( ) ^ * / + -
. Например, вы не можете использовать¤
вместо+
добавления. - Пробелы во входном выражении недопустимы в качестве входных
- Унарный +/- недопустим в качестве ввода, если он непосредственно следует за + или -. Считать
3+-2
неверным ввод. Это можно обработать как угодно (не должно выдавать ошибку). Если+
или-
следует какой - либо другой оператор , чем плюс или минус, он рассматривается как обычно:3*-3 = -9
,sin(-2)=-0.909
- Программа должна строго следовать буквам, а значит
"EMDAS", 1-3+4 => -6
и"EMDSA", 1-3+4 => 2
.
Примеры:
Input: "EMDAS", "3+6*2/4-1" // -> 3+12/4-1 -> 3+3-1 -> 6-1 -> 5
Output: 5
Input: "DAMES", "3+6*2/4-1" // -> 3+6*0.5-1 -> 9*0.5-1 -> 4.5-1 -> 3.5
Output: 3.5
Input: "SAD, ME", "3+6*2/4-1" // -> 3+6*2/3 -> 9*2/3 -> 9*0.66667 -> 6
Output: 6
Input: "ME ADS", "3+5^4/2-3*2 // -> 3+5^4/2-6 -> 3+625/2-6 -> 628/2-6 -> 314-6 -> 308
Output: 308
Input: "AM EDS", "4*3-sin(0.5^2)*3+1" // -> 4*3-sin(0.5^2)*4 -> 12-sin(0.5^2)*4 -> 4*3-(4*sin(0.5^2)) -> 12-(4*sin(0.5^2)) -> 12-(4*sin(0.25)) -> 12-(4*0.24740) -> 12-0.98961 -> 11.01038
Output: 11.01038
Input: "DAMES", "4-5-6" // -> (4-5)-6 -> = -7
Output: -7 // NOT: -> 4-(5-6) -> 4-(-1) -> 5
Обратите внимание, что скобки добавлены, чтобы показать, что умножение 4*sin(0.5^2)
вычисляется до возведения в степень.
Это код гольф, поэтому выигрывает самый короткий код в байтах.
BODMAS
или BIDMAS
в школе. B
= Скобки O
или I
= порядок или индексы.
p
необходимо? Это не в примерах