Это вызов, но с лучшей спецификацией.
спекуляция
Ваша программа возьмет линейное уравнение, содержащее одну переменную, x
и выведет значение x
.
Ввод / Разбор
- Входные данные будут содержать только числа, операторы, скобки (
()
)x
и=
знак (это означает отсутствие пробелов). - Круглая скобка всегда будет сбалансированной.
- Всегда будет хотя бы 1
x
.x
Может предшествовать число. - Все уравнения точно будут иметь один результат.
Число может быть определено, выполнив следующие действия. Номер может быть определен с помощью регулярного выражения: -?(\d+(\.\d+)?|\.\d+)
.
Если вы не говорите регулярное выражение: цифра определяется как 0-9
- Может иметь
-
в начале, что означает отрицательный - Тогда могут быть некоторые цифры. Если они не состоят из цифр, будет десятичная точка
- Если существует десятичная точка, за ней будет следовать хотя бы одна цифра
Наибольшее число / значение будет определяться возможностями вашего языка.
Оператор является любой из: +-*/
они всегда будут появляться между числами, и или скобка
это означает (5)(5)
недопустимый ввод для простоты.
Круглая скобка всегда будет содержать правильное выражение (допустимая комбинация чисел и / или операторов) внутри них. «Сбалансированная» скобка определяется как каждая (
будет иметь связанный закрытие)
оценка
- Порядок операций должен соблюдаться, и приоритеты (от наивысшего к низшему):
- Круглая скобка (наиболее глубоко вложенная в первую очередь)
- Умножение и деление
- Сложение и вычитание
- Если встречаются два оператора с одинаковым приоритетом, предпочтительнее идти налево -> направо
Выход
Вы должны вывести результат каким-то образом. Если вы не выводите только результат числа, уточните в своем ответе, как выводится результат. Ваш выходной формат должен быть согласованным. Вывод может быть десятичным, но он всегда будет рациональным, точность ограничена точностью вашего языка. Только если ваш язык не поддерживает арифметику с плавающей запятой, вам не нужно ее поддерживать.
правила
- Разрешены встроенные средства, упрощающие эту задачу, но вы должны четко добавить
[uses built-in]
в заголовок ответа. Это освобождает ваш ответ от победы - «Встроенные тривиализирующие эту задачу» - это любое из:
- Нечто, принимающее уравнение и выводящее значение для переменной
- Что-то, что полностью упростит уравнение
- Использование
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
НЕВЕРНЫЕ Входы:
(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
считается ли JavaScript тривиальным вызовом? Кроме того, формы new Function(...)
подсчета?