Создайте функцию, которая принимает полиномиальное уравнение, значение x
и возвращает результат операции.
Пример: дано 4x^2+2x-5
и x=3
вывод 37
. Это результат4(3)^2+2(3)-5
- Предположим, что все полиномы верны
- Полиномиальный формат всегда будет
coefficient(variable)^exponent => 4x^2
за исключением:- Когда показатель
1
это будетcoefficient(variable) => 4x
- Когда коэффициент
1
будет(variable)^exponent => x^2
- Когда показатель
- Полиномы только одна переменная
- Использование внешних библиотек запрещено
- Коэффициент и переменная ввода могут быть положительными и отрицательными числами.
Контрольные примеры
("3x^3-5x^2+2x-10", 5) => 250
("10x^4-5x^3-10x^2+3x+50", 3) => 644
("10x+20", 10) => 120
("-20x^2+20x-50", -8) => -1490
("9", 5) => 9
("8x^2+5", 0) => 5
Обновить
- Полиномиальный формат всегда будет
coefficient(variable)^exponent => 4x^2
за исключением:- Когда показатель
1
это будетcoefficient(variable) => 4x
- Когда коэффициент
1
будет(variable)^exponent => x^2
- Когда показатель
- Убрано правило отрицательного показателя. Моя ошибка. Действительный полином не содержит отрицательного показателя
- Показатель
0
будет простоcoefficient
- Добавлен контрольный пример для
input 0
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
code-golf
math
polynomials
Луис Фелипе Де Иисус Муньос
источник
источник
3x^3-5x^2+2x-10
мы могли ввести3*x^3-5*x^2+2*x-10
? Или[3 -5 2 -10]. [3 2 1 0]
?Ответы:
JavaScript (ES7), 48 байт
Основано на предложении @RickHitchcock
Ожидается
X
в верхнем регистре. Принимает ввод в синтаксисе карри(p)(X)
.Попробуйте онлайн!
JavaScript (ES7), 49 байт
Тот же подход, что и у @DeadPossum . Принимает ввод в синтаксисе карри
(p)(x)
.Попробуйте онлайн!
источник
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
если она не включена в число байтов, за счет 2 байтов, которые должны быть сохранены. Мне нравится этот метод, хотя. Там может быть способ сохранить один или два байта, обновив его как-то.X
в верхнем регистре, то мы можем сделатьa<{}?'*X':'**'
, сохраняя байт. Отсюда мой вопрос к ОП.x
один1x
дляx
.Python 2 , 54 байта
-2 байта благодаря Джо Кингу
-5 байт благодаря Арно
Попробуйте онлайн!
источник
Python 3 ,
535048 байтовредактировать : -5 байт благодаря Денису!
Попробуйте онлайн!
Используется,
translate
чтобы избежать цепочкиreplace
вызовов; Версия Python 3translate
менее неудобна, чем его предшественница.источник
"*(%d)"%x
может стать"*(x)"
.x
было в моейeval
сфере! Я обновлю.x
больше не является строковым представлением,"*x"
работает также.R , 44 байта
Попробуйте онлайн!
Довольно просто с R. Замените
nx
на,n*x
а затемeval
наparse
строку d.x
используется так, как мы называем второй аргумент.Функция Eval даже может быть использована более непосредственно с правильно отформатированным первым аргументом, и другие формальные аргументы (
y
,z
и т.д.) могут быть легко добавлены:R , 20 байт (не конкурирует)
Попробуйте онлайн!
источник
Japt 2.0, 13 байт
Попробуй это .
Объяснение:
источник
Wolfram Language (Mathematica) , 22 байта
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
113108 байтПопробуйте онлайн!
Благодаря @Arnauld
Поскольку лучшее JS-решение на сегодняшний день от @Arnauld (49 байт) уже опубликовано и использует его
eval
, я решил использовать Regex и уменьшить вместо этого.Довольно долго по сравнению с его, хотя.
Пояснение:
источник
-
вместо[-]
,~b.indexOf`x`
вместоb.indexOf`x`>0
и удаляя,l=
который не используется. (Но это не исправляет ошибку.)1x^-2
на-
.05AB1E ,
1619 байтов+3 байта как исправление для отрицательного ввода
x
..E
( Запуск от имени пакетного кода ) был заменен на Запуск от имени Pythoneval
в этом последнем коммите @Adnan , но эта версия еще не на TIO. @ Mr.Xcoder проверил его на своем локальном (последняя версия) 05AB1E, чтобы убедиться, что он работает.Смотрите эту версию, не
.E
видя, как она преобразует строку выражения.Объяснение:
Альтернатива
25-байтовой программе, работающей на текущей версии TIO:Попробуйте онлайн.
Объяснение:
“…¢(“
это строкаprint(
, потому что:“
и“
начинает и заканчивает сжатую строку…¢
равно,0426
потому что он смотрит на индексы в файле info.txt , где…
имеет индекс 4 и¢
имеет индекс 26.0426
затем используется в файле словаря , где строка 427 (индекс 426) - это слово, которое оно выбирает, чтоprint
в данном случае.(
не имеет индекса в файле info.txt, поэтому интерпретируется как есть.источник
JavaScript (Node.js) , 143 байта
Я знаю, что есть лучшие ответы, но я хотел сделать это, не используя eval
Попробуйте онлайн!
источник
[a-z0-9.]
не так ли? Единственное письмо , которое может появиться вx
. Любой почему.
? Вам не нужно обрабатывать нецелые коэффициенты или показатели.Физика , 35 байт
Попробуйте онлайн!
источник
Желе , 21 байт
Попробуйте онлайн!
источник
("-20x^2+20x-50", -8)
.Java 8,
150149148 байтНе уверен, возможно ли иметь карри лямбда-функцию, которая выдает исключение. Если это так, можно сохранить 1 байт, изменив-1 байт, спасибо @ OlivierGrégoire за то, что показали мне, как это сделать.(s,n)->
наn->s->
.Попробуйте онлайн.
Объяснение:
К сожалению, JavaScript eval не поддерживает
**
, поэтому я должен использовать вместо него более длинную заменуMath.pow
..источник
**
(ES7 +), почему это не поддерживается?eval
. И я думаю, что этот встроенный JavaScript-eval, с которым я могу использоватьScriptEngineManager
, не обновлялся в Java JDK в течение многих лет, поэтому он не поддерживаетES7+
..TI-Basic, 6 байтов
Выражение принимается в качестве аргумента, а X вводится во время выполнения. В качестве альтернативы 8 байтов без
expr
:Здесь оба аргумента вводятся во время выполнения.
источник
Октава ,
473837 байтСэкономил много байтов, взяв второй ввод в виде строки вместо числа.
Попробуйте онлайн!
Объяснение:
Довольно прямо вперед: Заменить
x
на(c)
, гдеc
находится второй вход, и оценить. Паретезы необходимы, потому что в Октаве-8^2 == -64
.источник
Рубин , 43 байта
Попробуйте онлайн!
источник
Perl 5
-pl
, 35 байтПопробуйте онлайн!
источник
Рубин ,
4341 байтПопробуйте онлайн!
Сохранено два байта благодаря @ Mr.Xcoder
Поскольку ответа на Ruby пока нет, я добавил его.НВМ был один, который использовал другой подходПояснение:
источник
gsub"x","*x"
экономит два байта.Excel, 36 + 2 байта, неконкурентный
Оценить текстовое поле как формулу не так просто в Excel. Существует скрытая
=EVALUATE()
функция, которая может быть вызвана путем определения имени.В Excel 2007, Формулы> Определить имя. Определить имя с именем
E
, со ссылкой на:Затем, при вводе формулы в
A1
,x
значение вB1
, ввод=E
вC1
возвращает ожидаемый результат.источник
Wolfram Language (Mathematica) , 19 байтов
Попробуйте онлайн!
Возьмите вход по выделке:
f[x][expr]
.источник