Crie uma função que use uma equação polinomial, um valor para x
e retorne o resultado da operação.
Exemplo: dado 4x^2+2x-5
e x=3
saída 37
. Este é o resultado de4(3)^2+2(3)-5
- Suponha que todos os polinômios são válidos
- O formato polinomial será sempre,
coefficient(variable)^exponent => 4x^2
exceto:- Quando expoente é
1
que serácoefficient(variable) => 4x
- Quando o coeficiente for
1
, será(variable)^exponent => x^2
- Quando expoente é
- Polinômios são apenas uma variável
- É proibido o uso de bibliotecas externas
- O coeficiente e a entrada variável podem ser números positivos e negativos.
Casos de teste
("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
Atualizar
- O formato polinomial será sempre,
coefficient(variable)^exponent => 4x^2
exceto:- Quando expoente é
1
que serácoefficient(variable) => 4x
- Quando o coeficiente for
1
, será(variable)^exponent => x^2
- Quando expoente é
- Removida a regra do expoente negativo. Meu erro. Um polinômio válido não contém expoente negativo
- Um expoente de
0
seria apenascoefficient
- Caso de teste adicionado para
input 0
Isso é código-golfe , então a resposta mais curta em bytes vence.
code-golf
math
polynomials
Luis felipe De jesus Munoz
fonte
fonte
3x^3-5x^2+2x-10
podemos inserir3*x^3-5*x^2+2*x-10
? Ou[3 -5 2 -10]. [3 2 1 0]
?Respostas:
JavaScript (ES7), 48 bytes
Com base em uma sugestão de @RickHitchcock
Espera
X
em maiúsculas. Recebe entrada na sintaxe de currying(p)(X)
.Experimente online!
JavaScript (ES7), 49 bytes
A mesma abordagem do @DeadPossum . Recebe entrada na sintaxe de currying
(p)(x)
.Experimente online!
fonte
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
menos que esteja incluída na contagem de bytes, ao custo dos 2 bytes que devem ser salvos. Eu gosto desse método, no entanto. Pode haver uma maneira de salvar um byte ou dois, renovando-o de alguma forma.X
maiúsculas, podemos fazê-loa<{}?'*X':'**'
, salvando um byte. Daí a minha pergunta para o OP.x
sozinhos1x
parax
.Python 2 , 54 bytes
-2 bytes graças a Jo King
-5 bytes graças a Arnauld
Experimente online!
fonte
Python 3 ,
535048 byteseditar : -5 bytes graças a Dennis!
Experimente online!
Usado
translate
para evitar encadearreplace
chamadas; A versão do Python 3translate
é menos estranha do que a do seu antecessor.fonte
"*(%d)"%x
pode se tornar"*(x)"
.x
estava no meueval
escopo! Eu vou atualizar.x
não é mais uma representação de strings, também"*x"
funciona.R , 44 bytes
Experimente online!
Bastante simples com R. Substitua
nx
porn*x
e depoiseval
pelaparse
string d.x
é usado, pois é assim que chamamos o segundo argumento.A função eval poderia até ser usado mais diretamente com um primeiro argumento formatado corretamente, e outros argumentos formais (
y
,z
, etc.) podem ser facilmente adicionados:R , 20 bytes (não concorrente)
Experimente online!
fonte
Japonês 2.0, 13 bytes
Experimente .
Explicação:
fonte
Wolfram Language (Mathematica) , 22 bytes
Experimente online!
fonte
JavaScript (Node.js) ,
113108 bytesExperimente online!
Obrigado a @Arnauld
Como a melhor solução JS até agora do @Arnauld (49 bytes) já foi publicada e utiliza
eval
, eu decidi usar o Regex e reduzir em vez disso.Bastante demorado comparado com o dele.
Explicação:
fonte
-
vez de[-]
, em~b.indexOf`x`
vez deb.indexOf`x`>0
e removendo ol=
que não é usado. (Mas isso não corrigir o erro.)1x^-2
no-
.05AB1E ,
1619 bytes+3 bytes como correção de erro para entrada negativa
x
..E
( Executar como código de lote ) foi substituído por Executar como Pythoneval
neste último commit do @Adnan , mas esta versão ainda não está no TIO. @ Mr.Xcoder testou em seu local (versão mais recente) 05AB1E para verificar se está funcionando.Veja esta versão sem
.E
para ver como ela converteu a string de expressão.Explicação:
Programa alternativo de
2528 bytes que funciona na versão atual do TIO:Experimente online.
Explicação:
“…¢(“
é a cadeiaprint(
, porque:“
e“
inicia e termina a sequência compactada…¢
é igual a0426
porque olha para os índices no arquivo info.txt , onde…
tem o índice 4 e o¢
índice 26.0426
é então usado no arquivo de dicionário , em que a linha 427 (índice 426) é a palavra que busca, que éprint
nesse caso.(
arquivo não possui um índice no arquivo info.txt, portanto é interpretado como está.fonte
JavaScript (Node.js) , 143 bytes
Eu sei que existem respostas melhores, mas eu queria fazer isso sem usar o eval
Experimente online!
fonte
[a-z0-9.]
não é? A única letra que pode aparecer éx
. Algum porque.
? Você não precisa manipular coeficientes não inteiros ou expoentes.Physica , 35 bytes
Experimente online!
fonte
Geléia , 21 bytes
Experimente online!
fonte
("-20x^2+20x-50", -8)
.Java 8,
150149148 bytesNão tenho certeza se é possível ter uma função lambda de currying que lança uma exceção. Se for, pode salvar 1 byte alterando-1 byte graças a @ OlivierGrégoire por me mostrar como fazer isso.(s,n)->
paran->s->
.Experimente online.
Explicação:
Infelizmente, o eval de JavaScript não suporta
**
, então tenho que usar uma substituição mais longa para convertê-loMath.pow
em ..fonte
**
(ES7 +), por que isso não é compatível?eval
. E eu acho que isso incorporado JavaScript-eval posso usar comScriptEngineManager
não foi atualizado no Java JDK durante anos, por isso não suportaES7+
..TI-Basic, 6 bytes
Expressão é tomada como argumento e X é inserido durante o tempo de execução. Alternativamente, 8 bytes sem
expr
:Aqui os dois argumentos são inseridos no tempo de execução.
fonte
Octave ,
473837 bytesEconomizou muitos bytes usando a segunda entrada como uma sequência em vez de um número.
Experimente online!
Explicação:
Bastante direto: substitua
x
por(c)
, ondec
está a segunda entrada, e avalie. As parênteses são necessárias porque na oitava-8^2 == -64
.fonte
Ruby , 43 bytes
Experimente online!
fonte
Perl 5
-pl
, 35 bytesExperimente online!
fonte
Ruby ,
4341 bytesExperimente online!
Economizou dois bytes graças a @ Mr.Xcoder
Como ainda não há uma resposta para Ruby, adicionei uma.Nvm, houve um que usou uma abordagem diferenteExplicação:
fonte
gsub"x","*x"
salva dois bytes.Excel, 36 + 2 bytes, Não concorrente
A avaliação de um campo de texto como uma fórmula não é direta no Excel. Há uma
=EVALUATE()
função oculta , que pode ser chamada definindo um Nome.No Excel 2007, Fórmulas> Definir nome. Defina um Nome chamado
E
, com Refere-se a:Em seguida, com a entrada na Fórmula
A1
,x
valor emB1
, entrando=E
emC1
retornos resultado esperado.fonte
Língua Wolfram (Mathematica) , 19 bytes
Experimente online!
Tome entrada por currying:
f[x][expr]
.fonte