Diese Herausforderung aber mit einer besseren Spezifikation.
Spec
Ihr Programm nimmt eine lineare Gleichung, die eine einzelne Variable enthält, x
und gibt den Wert von aus x
.
Eingabe / Analyse
- Die Eingabe enthält nur Zahlen, Operatoren, Klammern (
()
)x
und ein=
Vorzeichen (dh kein Leerzeichen). - Klammern werden immer ausgeglichen sein.
- Es wird immer mindestens 1 geben
x
. Anx
kann eine Zahl vorangestellt werden. - Alle Gleichungen haben genau ein Ergebnis.
Eine Nummer kann folgendermaßen definiert werden. Eine Zahl kann durch den regulären Ausdruck definiert werden: -?(\d+(\.\d+)?|\.\d+)
.
Wenn Sie kein Regex sprechen: Eine Ziffer ist definiert als 0-9
- Es kann ein
-
am Anfang stehen, was negativ bedeutet - Dann kann es einige Ziffern geben. Wenn es sich nicht um Ziffern handelt, wird ein Dezimalpunkt angezeigt
- Wenn ein Dezimalpunkt vorhanden ist, folgt ihm mindestens eine Ziffer
Die größte Zahl / der größte Wert wird durch die Fähigkeiten Ihrer Sprache definiert.
Ein Operator ist einer von:, +-*/
sie werden immer zwischen Zahlen und / oder Klammern angezeigt
Dies bedeutet, dass (5)(5)
der Einfachheit halber keine gültige Eingabe ist.
Klammern enthalten immer einen gültigen Ausdruck (eine gültige Kombination von Zahlen und / oder Operatoren). "Ausgewogene" Klammern sind definiert, da jeder Klammer (
eine Schließung zugeordnet ist)
Auswertung
- Die Reihenfolge der Operationen sollte eingehalten werden und die Prioritäten lauten (von der höchsten zur niedrigsten):
- Klammer (am tiefsten verschachtelt zuerst)
- Multiplikation & Division
- Addition Subtraktion
- Wenn zwei Operatoren mit der gleichen Priorität auftreten, sollten Sie lieber nach links -> rechts gehen
Ausgabe
Sie sollten das Ergebnis auf irgendeine Weise ausgeben. Wenn Sie nicht nur Zahlenergebnisse ausgeben, erläutern Sie in Ihrer Antwort, wie die Ausgabe erfolgt. Ihr Ausgabeformat sollte konsistent sein. Die Ausgabe kann eine Dezimalzahl sein, ist jedoch immer rational. Die Genauigkeit ist auf die Genauigkeit Ihrer Sprache beschränkt. Nur wenn Ihre Sprache keine Gleitkomma-Arithmetik unterstützt, müssen Sie sie nicht unterstützen.
Regeln
- Built-In diese Aufgabe Trivialisierung sind erlaubt aber , müssen Sie deutlich hinzufügen ,
[uses built-in]
eindeutig auf die Header der Antwort. Dies befreit Ihre Antwort vom Gewinn - Ein "Built-In, das diese Aufgabe trivialisiert", ist eines von:
- Etwas, das eine Gleichung aufnimmt und den Wert für eine / die Variable ausgibt
- Etwas, das eine Gleichung völlig vereinfacht
- Verwenden
eval
oder einer verwandten Funktion, um einen wesentlichen Teil des Parsings durchzuführen. Die Verwendung voneval
und verwandte Funktionen sind nicht zulässig, wenn sie zum Lösen von linearen Gleichungen (mit minimaler Änderung der Eingabe) verwendet werden. - Wenn Sie Zweifel haben, fragen Sie einfach in einem Kommentar.
- Eingebaute, die die Gleichung analysieren, sind erlaubt
Beispiele
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
UNGÜLTIGE Eingänge:
(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
als Trivialisierung der Herausforderung? Würden auch Formen new Function(...)
zählen?