Створіть програму, яка розв’язує математичний вираз, використовуючи елементи з чергуються сторін виразу. Так, як це робиться, замість того, щоб читати зліва направо, ви читаєте перший символ, потім останній, потім другий, потім другий останній тощо. Це дасть вам новий вираз, який ви повинні оцінити та вивести.
a*b/c+d-e
135798642 <-- Order you read the expression in
ae*-bd/+c <-- Order of operation.
Приклад:
1*3/2+4-5
15*-34/+2 = -255
Якщо вираз не працює, його 1потрібно вставити в необхідні позиції, щоб він працював.
Кілька прикладів, ймовірно, це проілюструють краще:
Input: 1+1+1+1+1
Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23
Input: 1+2-3+12-5
Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19
// |
// Not valid expression
Input: 2*2*2*2*2
Result: 968 // Because 2*2*2*2*2 -> 22**22**2 -> 22*1*22*1*2 -> 968
// || ||
// Not valid, 1 must be inserted
Input: 17/2
Output: 127 // Because 17/2 = 127/ -> 127/1 -> 127
Оператори, які повинні бути підтримані, є + - * /. В дужках не буде Використовуються звичайні математичні правила та "синтаксис", тому, наприклад **, не означає експоненцію. a++++1еквівалентний a+1(тобто стиль MATLAB, а не C ++).
У разі сумнівів, деякими дійсними операціями є:
-a
+a
a++b
a+-b
a*-b
a*+b
a*++b
a/b
a/-b
a/+b
-a/--b
Хоча всі наведені нижче дії не дійсні. Показано, чим їх слід замінити:
a+ | a+1
a- | a-1
a++++ | a++++1 (This is equivalent to a+1)
a*+++ | a*+++1 (This is equivalent to a*1)
a**b | a*1*b
a*/b | a*1/b
a/*b | a/1*b
a* | a*1
*a | 1*a
***a | 1*1*1*a
Правила:
- Код може бути функцією або повноцінною програмою
- Вхід може бути STDIN або аргумент функції
- Вхід повинен бути дійсним математичним виразом, без лапок,
''або"". - Вихід повинен бути відповіддю на новий вираз у вигляді цілого числа, десяткових чи спрощеного дробу.
- Принаймні три цифри після десяткової крапки повинні бути підтримані. Отже
1/3 = 0.333, ні0.33.0.333333333приймається. ans = ...приймається.- Приймаються провідні та остаточні лінії та пробіли.
- Вхід буде лише цілими числами
- Ділення на нуль може призвести до помилки, NaN, Inf тощо. Виведення номера не приймається.
Як завжди, виграє найкоротший код у байтах. Переможець буде обраний через тиждень з дня опублікування виклику. Відповіді, опубліковані пізніше, можуть все-таки виграти, якщо він коротший, ніж поточний керівник.
0/0якщо вираз дорівнює цілому поділу або модулю на нуль?
x/0це дійсний вихід. Поки вона не видає неправильну відповідь, це нормально. Помилка та "Не число" за визначенням правильні, а нескінченність - "достатньо правильна",
2^64, і чи повинна вона помилятися або перетворювати, якщо ви переходите?