Ce défi mais avec une meilleure spécification.
Spec
Votre programme prendra une équation linéaire contenant une seule variable x
et affichera la valeur de x
.
Entrée / analyse
- L'entrée ne contiendra que des nombres, des opérateurs, des parenthèses (
()
)x
et un=
signe (cela signifie qu'il n'y a pas d'espaces). - Les parenthèses seront toujours équilibrées.
- Il y en aura toujours au moins 1
x
. Unx
peut être précédé d'un nombre. - Toutes les équations auront exactement un résultat.
Un nombre peut être défini en suivant ces étapes. Un certain nombre peut être défini par l'expression rationnelle: -?(\d+(\.\d+)?|\.\d+)
.
Si vous ne parlez pas d'expression régulière: un chiffre est défini comme 0-9
- Il peut y avoir
-
au début un signe négatif - Ensuite, il peut y avoir quelques chiffres. S'il n'y a pas de chiffres, il y aura un point décimal
- S'il existe un point décimal, au moins un chiffre le suivra
Le plus grand nombre / valeur sera défini par les capacités de votre langue.
Un opérateur est l'un des:, +-*/
ils apparaîtront toujours entre les nombres et ou entre parenthèses
cela signifie que ce (5)(5)
n'est pas une entrée valide pour des raisons de simplicité.
Les parenthèses contiendront toujours une expression valide (une combinaison valide de nombres et / ou d'opérateurs) à l'intérieur. La parenthèse "équilibrée" est définie comme chaque (
aura une fermeture associée)
Évaluation
- L'ordre des opérations doit être suivi et les priorités sont (du plus élevé au plus bas):
- Parenthèses (les plus profondément imbriquées en premier)
- Multiplication et division
- Addition soustraction
- Si deux opérateurs avec la même priorité se sont produits, vous devriez préférer aller à gauche -> à droite
Production
Vous devez sortir le résultat d'une manière ou d'une autre. Si vous ne sortez pas simplement le résultat numérique, clarifiez dans votre réponse comment la sortie est sortie. Votre format de sortie doit être cohérent. La sortie peut être une décimale, mais elle sera toujours rationnelle, la précision est limitée à la précision de votre langue. Seulement si votre langue ne prend pas en charge l'arithmétique à virgule flottante, vous n'avez pas besoin de la prendre en charge.
Règles
- Les fonctions intégrées banalisant cette tâche sont autorisées, mais vous devez clairement ajouter
[uses built-in]
clairement à l'en-tête de la réponse. Cela exempte votre réponse de gagner - Un "Built-ins banalisant cette tâche" est l'un des:
- Quelque chose qui prend une équation et génère la valeur pour une / la variable
- Quelque chose qui simplifiera complètement une équation
- Utiliser
eval
ou une fonction associée pour effectuer une quantité importante d'analyse. L'utilisationeval
et les fonctions associées sont interdites si elles sont utilisées (avec une modification minimale de l'entrée) pour résoudre des équations linéaires. - En cas de doute, il suffit de demander dans un commentaire.
- Les éléments intégrés qui analysent l'équation sont autorisés
Exemples
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
Entrées non valides :
(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
compte pour banaliser le défi? En outre, les formes de new Function(...)
comptage seraient- elles