Ich habe die Idee, zufällige mathematische Ausdrücke zu generieren und auszuwerten. Also habe ich beschlossen, es auszuprobieren und einen Algorithmus auszuarbeiten, bevor ich ihn zum Testen codiere.
Beispiel:
Hier sind einige Beispielausdrücke, die ich zufällig generieren möchte:
4 + 2 [easy]
3 * 6 - 7 + 2 [medium]
6 * 2 + (5 - 3) * 3 - 8 [hard]
(3 + 4) + 7 * 2 - 1 - 9 [hard]
5 - 2 + 4 * (8 - (5 + 1)) + 9 [harder]
(8 - 1 + 3) * 6 - ((3 + 7) * 2) [harder]
Die einfachen und mittleren sind ziemlich direkt. Zufällige int
s durch zufällige Operatoren getrennt, hier nichts verrücktes. Aber ich habe einige Probleme mit etwas Sie beginnen , die eine der schaffen könnte hart und härter Beispiele. Ich bin mir nicht mal sicher, ob ein einziger Algorithmus mir die letzten beiden geben könnte.
Was ich überlege:
Ich kann nicht sagen, dass ich diese Ideen ausprobiert habe , weil ich nicht wirklich viel Zeit damit verschwenden wollte, in eine Richtung zu gehen, in der es überhaupt keine Chance gab, zu arbeiten. Trotzdem habe ich mir ein paar Lösungen überlegt:
- Bäume benutzen
- Reguläre Ausdrücke verwenden
- Verwenden einer verrückten "for-type" -Schleife (sicherlich die schlechteste)
Was ich suche:
Ich würde gerne wissen, welcher Weg Ihrer Meinung nach der beste ist, zwischen den von mir in Betracht gezogenen Lösungen und Ihren eigenen Ideen.
Wenn Sie einen guten Einstieg sehen, würde ich mich über einen Hinweis in die richtige Richtung freuen, z. B. mit dem Beginn des Algorithmus oder dessen allgemeiner Struktur.
Beachten Sie auch, dass ich diese Ausdrücke auswerten muss. Dies kann entweder nach der Generierung des Ausdrucks oder während seiner Erstellung erfolgen. Wenn Sie das in Ihrer Antwort berücksichtigen, ist das großartig.
Ich bin nicht auf der Suche nach sprachbezogenen Inhalten, aber für die Aufzeichnung denke ich darüber nach, sie in Objective-C zu implementieren, da dies die Sprache ist, mit der ich in letzter Zeit am meisten arbeite.
In diesen Beispielen war der :
Operator nicht enthalten , da ich nur int
s manipulieren möchte , und dieser Operator fügt viele Überprüfungen hinzu. Wenn Ihre Antwort eine Lösung für diese Frage liefert, ist das großartig.
Wenn meine Frage einer Klärung bedarf, bitte in den Kommentaren nachfragen. Danke für Ihre Hilfe.