Questa sfida ma con una specifica migliore.
Spec
Il tuo programma prenderà un'equazione lineare contenente una singola variabile x
e genererà il valore di x
.
Input / Analisi
- L'input conterrà solo numeri, operatori, parentesi (
()
)x
e un=
segno (questo significa nessuno spazio). - Le parentesi saranno sempre bilanciate.
- Ci sarà sempre almeno 1
x
. Unx
può essere preceduto da un numero. - Tutte le equazioni avranno esattamente un risultato.
È possibile definire un numero seguendo questi passaggi. Un numero può essere definita dalla regex: -?(\d+(\.\d+)?|\.\d+)
.
Se non parli regex: una cifra è definita come 0-9
- Potrebbe avere
-
all'inizio un significato negativo - Quindi potrebbero esserci delle cifre. Se non sono presenti cifre, ci sarà un punto decimale
- Se esiste un punto decimale, almeno una cifra lo seguirà
Il più grande sarà un numero / valore è definito dalle capacità della tua lingua.
Un operatore è uno dei seguenti: +-*/
appariranno sempre tra numeri e / o parentesi
questo significa che (5)(5)
non è un input valido per motivi di semplicità.
Le parentesi conterranno sempre un'espressione valida (una combinazione valida di numeri e / o operatori) al loro interno. La parentesi "bilanciata" è definita in quanto ad ogni (
verrà associata una chiusura)
Valutazione
- È necessario seguire l'ordine delle operazioni e le precedenti sono (dal più alto al più basso):
- Parentesi (prima il più profondamente annidato)
- Moltiplicazione e divisione
- Addizione e sottrazione
- Se si verificano due operatori con la stessa precedenza, dovresti preferire andare a sinistra -> a destra
Produzione
Dovresti produrre il risultato in qualche modo. Se non si genera solo il risultato numerico, chiarire nella risposta come viene emesso l'output. Il formato di output deve essere coerente. L'output può essere un decimale, ma sarà sempre razionale, la precisione è limitata alla precisione della tua lingua. Solo se la tua lingua non supporta l'aritmetica in virgola mobile, non è necessario supportarla.
Regole
- Gli incorporamenti che banalizzano questa attività sono consentiti , ma è necessario aggiungere
[uses built-in]
chiaramente l'intestazione della risposta. Questo esonera la tua risposta dalla vincita - Un "built-in che banalizza questo compito" è uno dei seguenti:
- Qualcosa che accetta un'equazione e genera il valore per a / la variabile
- Qualcosa che semplificherà completamente un'equazione
- Utilizzo
eval
o una funzione correlata per eseguire una quantità significativa dell'analisi. L'usoeval
e le funzioni correlate non sono consentite se sono abituati a (con una modifica minima all'input) risolvere equazioni lineari. - In caso di dubbi, basta chiedere in un commento.
- Sono consentiti built-in che analizzano l'equazione
Esempi
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
Ingressi non validi :
(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 come banalizzare la sfida? Inoltre, le forme di new Function(...)
conteggio?