Cree una función que tome una ecuación polinómica, un valor para x
y devuelva el resultado de la operación.
Ejemplo: dado 4x^2+2x-5
y x=3
salida 37
. Este es el resultado de4(3)^2+2(3)-5
- Suponga que todos los polinomios son válidos
- El formato polinómico siempre será
coefficient(variable)^exponent => 4x^2
excepto:- Cuando el exponente es
1
serácoefficient(variable) => 4x
- Cuando el coeficiente es
1
será(variable)^exponent => x^2
- Cuando el exponente es
- Los polinomios son solo una variable
- El uso de bibliotecas externas está prohibido.
- El coeficiente y la entrada variable pueden ser números positivos y negativos.
Casos de prueba
("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
Actualizar
- El formato polinómico siempre será
coefficient(variable)^exponent => 4x^2
excepto:- Cuando el exponente es
1
serácoefficient(variable) => 4x
- Cuando el coeficiente es
1
será(variable)^exponent => x^2
- Cuando el exponente es
- Se eliminó la regla del exponente negativo. Mi error. Un polinomio válido no contiene exponente negativo
- Un exponente de
0
sería solocoefficient
- Se agregó un caso de prueba para
input 0
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
code-golf
math
polynomials
Luis felipe De jesus Munoz
fuente
fuente
3x^3-5x^2+2x-10
podemos ingresar3*x^3-5*x^2+2*x-10
? O[3 -5 2 -10]. [3 2 1 0]
?Respuestas:
JavaScript (ES7), 48 bytes
Basado en una sugerencia de @RickHitchcock
Espera
X
en mayúsculas. Toma entrada en la sintaxis de curry(p)(X)
.Pruébalo en línea!
JavaScript (ES7), 49 bytes
El mismo enfoque que @DeadPossum . Toma entrada en la sintaxis de curry
(p)(x)
.Pruébalo en línea!
fuente
replace
:p=>x=>eval(p.replace(/[x^]/g,a=>a>f?'*x':'**'))
f
menos que esté incluida en el recuento de bytes, a costa de los 2 bytes que se supone que se guardarán. Sin embargo, me gusta este método. Puede haber una manera de guardar un byte o dos actualizándolo de alguna manera.X
mayúsculas, entonces podemos hacerloa<{}?'*X':'**'
, guardando un byte. De ahí mi pregunta al OP.x
solo1x
parax
.Python 2 , 54 bytes
-2 bytes gracias a Jo King
-5 bytes gracias a Arnauld
Pruébalo en línea!
fuente
Python 3 ,
535048 byteseditar : -5 bytes gracias a Dennis!
Pruébalo en línea!
Se usa
translate
para evitar encadenarreplace
llamadas; La versión de Python 3translate
es menos incómoda que la de su predecesora.fuente
"*(%d)"%x
puede llegar a ser"*(x)"
.x
estaba dentro de mieval
alcance! Voy a actualizarx
que ya no es una representación de cadena, también"*x"
funciona.R , 44 bytes
Pruébalo en línea!
Bastante sencillo con R. Reemplazar
nx
conn*x
y luegoeval
laparse
cadena d.x
se usa ya que así es como nombramos el segundo argumento.La función eval podría incluso ser utilizado de manera más directa con un primer argumento con el formato correcto, y otros argumentos formales (
y
,z
, etc.) podría ser fácilmente añadidos:R , 20 bytes (no competitivos)
Pruébalo en línea!
fuente
Japt 2.0, 13 bytes
Probarlo .
Explicación:
fuente
Wolfram Language (Mathematica) , 22 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) ,
113108bytesPruébalo en línea!
Gracias a @Arnauld
Dado que la mejor solución JS hasta el momento por @Arnauld (49 bytes) ya ha sido publicada y se usa
eval
, decidí usar Regex y reducir en lugar de eso.Aunque bastante largo en comparación con el suyo.
Explicacion:
fuente
-
lugar de[-]
, en~b.indexOf`x`
lugar deb.indexOf`x`>0
y eliminando ell=
que no se utiliza. (Pero esto no soluciona el error).1x^-2
en el-
.05AB1E ,
1619 bytes+3 bytes como corrección de errores para entrada negativa
x
..E
( Ejecutar como código de lote ) se ha reemplazado con Ejecutar como Pythoneval
en esta última confirmación de @Adnan , pero esta versión aún no está en TIO. @ Mr.Xcoder lo probó en su local (última versión) 05AB1E para verificar que funciona.Vea esta versión sin
.E
ver cómo convirtió la cadena de expresión.Explicación:
Programa alternativo de
2528 bytes que funciona en la versión actual de TIO:Pruébalo en línea.
Explicación:
“…¢(“
es la cadenaprint(
porque:“
y“
comienza y termina la cadena comprimida…¢
es igual a0426
porque mira los índices en el archivo info.txt , donde…
tiene el índice 4 y¢
tiene el índice 26.0426
se usa luego en el archivo del diccionario , donde la línea 427 (índice 426) es la palabra que busca, que esprint
en este caso.(
no tiene un índice en el archivo info.txt, por lo que se interpreta como es.fuente
JavaScript (Node.js) , 143 bytes
Sé que hay mejores respuestas, pero quería hacerlo sin usar eval
Pruébalo en línea!
fuente
[a-z0-9.]
¿verdad? La única letra que puede aparecer esx
. ¿Por qué.
? No necesita manejar coeficientes o exponentes no enteros.Physica , 35 bytes
Pruébalo en línea!
fuente
Jalea , 21 bytes
Pruébalo en línea!
fuente
("-20x^2+20x-50", -8)
.Java 8,
150149148 bytesNo estoy seguro de si es posible tener una función lambda curry que arroje una excepción. Si es así, se puede guardar 1 byte cambiando-1 byte gracias a @ OlivierGrégoire por mostrarme cómo hacer esto.(s,n)->
an->s->
.Pruébalo en línea.
Explicación:
Desafortunadamente, la evaluación de JavaScript no es compatible
**
, por lo que tengo que usar un reemplazo más largo para convertirla en suMath.pow
lugar ...fuente
**
(ES7 +), ¿por qué esto no admite eso?eval
. Y creo que esta evaluación de JavaScript incorporada que puedo usarScriptEngineManager
no se ha actualizado en Java JDK durante años, por lo que no es compatibleES7+
...TI-Basic, 6 bytes
La expresión se toma como argumento y se ingresa X durante el tiempo de ejecución. Alternativamente 8 bytes sin
expr
:Aquí se ingresan ambos argumentos en tiempo de ejecución.
fuente
Octava ,
473837 bytesAhorró muchos bytes al tomar la segunda entrada como una cadena en lugar de un número.
Pruébalo en línea!
Explicación:
Bastante sencillo: reemplazar
x
por(c)
, dondec
es la segunda entrada, y evaluar. Los paréntesis son necesarios porque en Octave-8^2 == -64
.fuente
Ruby , 43 bytes
Pruébalo en línea!
fuente
Perl 5
-pl
, 35 bytesPruébalo en línea!
fuente
Ruby ,
4341 bytesPruébalo en línea!
Guardado dos bytes gracias a @ Mr.Xcoder
Como todavía no hay una respuesta de Ruby, agregué una.Nvm hubo uno que usó un enfoque diferenteExplicacion:
fuente
gsub"x","*x"
salva dos bytes.Excel, 36 + 2 bytes, no competidor
Evaluar un campo de texto como una fórmula no es sencillo en Excel. Hay un escondido
=EVALUATE()
función , a la que se puede llamar definiendo un Nombre.En Excel 2007, Fórmulas> Definir nombre. Definir un nombre llamado
E
, con referencias a:Luego, con la entrada de Fórmula adentro
A1
, elx
valor adentroB1
, ingresando=E
en elC1
resultado esperado.fuente
Wolfram Language (Mathematica) , 19 bytes
Pruébalo en línea!
Toma de entrada por currificación:
f[x][expr]
.fuente