Este desafio, mas com uma especificação melhor.
Spec
Seu programa utilizará uma equação linear contendo uma única variável x
e produzirá o valor de x
.
Entrada / Análise
- A entrada conterá apenas números, operadores, parênteses (
()
)x
e um=
sinal (isso significa que não há espaço em branco). - Os parênteses sempre serão equilibrados.
- Sempre haverá pelo menos 1
x
. Umx
pode ser precedido por um número. - Todas as equações terão exatamente um resultado.
Um número pode ser definido seguindo estas etapas. Um número pode ser definido pela expressão regular: -?(\d+(\.\d+)?|\.\d+)
.
Se você não fala regex: um dígito é definido como 0-9
- Pode ter um
-
no início significando negativo - Depois, há podem ser alguns dígitos. Se eles não tiverem dígitos, haverá um ponto decimal
- Se existir um ponto decimal, pelo menos um dígito o seguirá
O maior número / valor será definido pelos recursos do seu idioma.
Um operador é um dos seguintes: +-*/
eles sempre aparecerão entre números e ou parênteses
isso significa que (5)(5)
não é uma entrada válida por uma questão de simplicidade.
Os parênteses sempre conterão uma expressão válida (uma combinação válida de números e / ou operadores) dentro deles. Parênteses "equilibrado" é definido, pois todos (
terão um fechamento associado)
Avaliação
- A ordem das operações deve ser seguida e as precedências são (da maior para a menor):
- Parênteses (mais profundamente aninhado primeiro)
- Multiplicação e Divisão
- Adição subtração
- Se ocorrerem dois operadores com a mesma precedência, você deve preferir ir para a esquerda -> direita
Resultado
Você deve produzir o resultado de alguma maneira. Se você não gerar apenas o resultado numérico, esclareça na sua resposta como a saída é gerada. Seu formato de saída deve ser consistente. A saída pode ser decimal, mas sempre será racional, a precisão é limitada à precisão do seu idioma. Somente se seu idioma não suportar aritmética de ponto flutuante, você não precisará suportá-lo.
Regras
- Built-ins trivializando esta tarefa são permitidos , mas você deve adicionar
[uses built-in]
claramente claramente ao cabeçalho da resposta. Isso isenta sua resposta de ganhar - Um "Built-ins trivializando esta tarefa" é um dos seguintes:
- Algo que pega uma equação e gera o valor para uma / a variável
- Algo que simplificará completamente uma equação
- Usando
eval
ou uma função relacionada para realizar uma quantidade significativa da análise. O uso deeval
e funções relacionadas não são permitidas se estiverem acostumadas a (com modificação mínima na entrada) resolver equações lineares. - Em caso de dúvida, basta perguntar em um comentário.
- Built-ins que analisam a equação são permitidos
Exemplos
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 INVALID :
(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
conta como trivializando o desafio? Além disso, formas de new Function(...)
contagem?