Este desafío pero con una mejor especificación.
Especificaciones
Su programa tomará una ecuación lineal que contiene una sola variable x
y generará el valor de x
.
Entrada / análisis
- La entrada solo contendrá números, operadores, paréntesis (
()
)x
y un=
signo (esto significa que no hay espacios en blanco). - Los paréntesis siempre serán equilibrados.
- Siempre habrá al menos 1
x
. Unx
puede estar precedido por un número. - Todas las ecuaciones tendrán exactamente un resultado.
Se puede definir un número siguiendo estos pasos. Un número se puede definir por la expresión regular: -?(\d+(\.\d+)?|\.\d+)
.
Si no habla regex: un dígito se define como 0-9
- Puede tener un
-
al principio que significa negativo - Entonces puede haber algunos dígitos. Si no son dígitos, habrá un punto decimal
- Si existe un punto decimal, al menos un dígito lo seguirá
El mayor número / valor será definido por las capacidades de su idioma.
Un operador es cualquiera de: +-*/
siempre aparecerán entre números o paréntesis
Esto significa (5)(5)
que no es una entrada válida en aras de la simplicidad.
El paréntesis siempre contendrá una expresión válida (una combinación válida de números y / u operadores) dentro de ellos. El paréntesis "equilibrado" se define como cada uno (
tendrá un cierre asociado)
Evaluación
- Se debe seguir el orden de las operaciones y las precedentes son (de mayor a menor):
- Paréntesis (el más anidado primero)
- Multiplicación y división
- Suma resta
- Si se producen dos operadores con la misma precedencia, debe preferir ir a la izquierda -> derecha
Salida
Debe generar el resultado de alguna manera. Si no emite solo el resultado numérico, aclare en su respuesta cómo se emite la salida. Su formato de salida debe ser consistente. La salida puede ser un decimal, pero siempre será racional, la precisión se limita a la precisión de su idioma. Solo si su idioma no es compatible con la aritmética de coma flotante, no es necesario que lo sea.
Reglas
- Se permiten los elementos integrados que trivializan esta tarea , pero debe agregar
[uses built-in]
claramente al encabezado de la respuesta. Esto exime su respuesta de ganar - Un "Incorporado trivializando esta tarea" es cualquiera de:
- Algo que toma una ecuación y genera el valor para una / la variable
- Algo que simplificará completamente una ecuación.
- Usar
eval
o una función relacionada para realizar una cantidad significativa del análisis. El usoeval
y las funciones relacionadas no se permiten si se utilizan para (con una modificación mínima a la entrada) resolver ecuaciones lineales. - Si tiene dudas, solo pregunte en un comentario.
- Se permiten los elementos integrados que analizan la ecuación.
Ejemplos
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
Entradas inválidas :
(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
trivializar el desafío? Además, ¿las formas de new Function(...)
conteo?