Порядок операцій, PEMDAS, - це основне правило математики, яке говорить нам, які операції з замовленням слід виконувати:
"Дужки, складові, множення і ділення та додавання і віднімання"
Проблема в тому, що PEMDAS не дуже універсальний! Що робити, якщо ви хотіли зробити це в іншому порядку? Ми не будемо возитися з дужками, тому зберігаємо їх там, де вони є (першими).
Створіть програму, яка бере два аргументи:
- Рядок, який говорить про те, в якому порядку повинні слідувати операції. Ось деякі приклади
"DAMES"
,"SAD, ME"
,"ME SAD"
,"MEADS"
. Так, пробіли та коми добре, оскільки це полегшує запам'ятовування.- Наступні пропозиції в чаті: Підтримка пробілів і косів тепер необов’язкова.
- Якщо один з листів відсутній або є додаткові літери, яких не повинно бути, ви можете вважати вхід недійсним і обробляти його, як завгодно.
- Рядок або вираз, що містить вираз, який слід оцінити.
Повертайте результат вираження як десятковий номер, або ціле число. Якщо відповідь не є цілим числом, її потрібно повернути у вигляді десяткового числа.
Правила:
- Добре поєднувати два вхідні аргументи в один, якщо це простіше у вашій мові.
- Це не повинно бути рядком, але воно повинно мати літери. Ви не можете замінити додаток на 1, поділ на 2 тощо.
- Ви можете вибрати, який вхід є першим.
- Вираз оцінюється
справа налівозліва направо. (Зміна правила. Будь-які подання на плакат перші 12 годин, які мають інше, приймаються) - Операції використовувати символи:
( ) ^ * / + -
. Наприклад, ви не можете використовувати¤
замість+
додавання. - Пробіли у вхідному виразі недійсні як введення
- Unary +/- недійсний як вхідний, якщо він безпосередньо слідує + або -. Розглянемо
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
потрібно? Це не в прикладах