Цей виклик, але з кращими характеристиками.
Спец
Ваша програма візьме лінійне рівняння, що містить одну змінну x
і виведе значення x
.
Введення / розбір
- Вхід буде містити лише числа, оператори, дужки (
()
)x
, та=
знак (це означає, що пробілу немає). - Парентез завжди буде врівноваженим.
- Завжди буде як мінімум 1
x
. Ануx
може передувати число. - Усі рівняння точно матимуть один результат.
Число може бути визначено, виконавши такі дії. Номер може бути визначений з допомогою регулярного виразу: -?(\d+(\.\d+)?|\.\d+)
.
Якщо ви не розмовляєте з регулярними виразами: цифра визначається як 0-9
- Це може бути
-
на початку, що означає негатив - Тоді можуть бути деякі цифри. Якщо вони не будуть жодними цифрами, буде десяткова крапка
- Якщо існує десяткова крапка, за нею буде принаймні одна цифра
Найбільше число / значення буде визначено можливостями вашої мови.
Оператор є будь-який з: +-*/
вони завжди будуть з'являтися між числами, і чи дужка
це означає, що (5)(5)
це не є дійсним для простоти.
Парентез завжди міститиме дійсне вираження (дійсна комбінація чисел та / або операторів) всередині них. "Збалансована" дужка визначається, оскільки кожна (
матиме пов'язане з цим закриття)
Оцінка
- Порядок операцій слід дотримуватися, а пріоритети (найвищі до найнижчих):
- Парентез (найбільш глибоко вкладений перший)
- Множення та ділення
- Додавання і віднімання
- Якщо трапляються два оператори з однаковим пріоритетом, вам слід віддати перевагу вліво -> праворуч
Вихідні дані
Ви повинні певним чином вивести результат. Якщо ви не виведете результат лише з числа, уточніть у своїй відповіді, як виводиться результат. Ваш вихідний формат повинен відповідати. Вихід може бути десятковою, але це завжди буде раціонально, точність обмежена точністю вашої мови. Тільки якщо ваша мова не підтримує арифметику з плаваючою комою, вам не потрібно її підтримувати.
Правила
- Вбудовані тривіалізації цього завдання дозволені, але ви повинні чітко додати
[uses built-in]
чітко до заголовка відповіді. Це звільняє вашу відповідь від виграшу - "Вбудовані модулі, які реалізують це завдання", це будь-яке з:
- Щось, що приймає рівняння і виводить значення для a / змінної
- Щось, що повністю спростить рівняння
- Використання
eval
або пов’язана функція для здійснення значного обсягу розбору. Використанняeval
та пов'язані з ними функції заборонені, якщо вони використовуються для (з мінімальними змінами на вхід) рішення лінійних рівнянь. - Якщо ви сумніваєтесь, просто запитайте у коментарі.
- Вбудовані модулі, які аналізують рівняння, дозволені
Приклади
3+4=x
7
4+x=5
1
3+3*3=x
12
3x-4=7+2x
11
3--1=x
4
3*(2+4x)=7x-4
-2
1.2+2.3x=5.8
2
10=4x
2.5
INVALID Введення:
(5)(4)=x no operator between (5) and (4)
5(x+3)=2 no operator 5 and (...)
x=y the only variable is x
4=3 there is no x
x+3=x-7 no solution
x=x infinite solutions
+5=x + is not an unary operator. -5=x would be valid though
1/(x-3)=5 Nonlinear
3/x Nonlinear
eval
виправданням проблему? Також, чи були б форми new Function(...)
рахунку?