Asalam alaykum!
ich habe folgendes Problem: Ich habe einen Satz von Zahlen und mathematischen Verknüpfungen (in diesem Fall + , * und =) und deren jeweilige Anzahl.
Alle möglichen Anordnungen dieses Alphabets will ich nun per Brutforce auswerten, ob diese Sinn machen, z.B.:
123+= ... 1=+32 ... 1+2=3 ...
Es sollten n! Kombinationen sein.
In welchem Kontext sollen sie denn Sinn machen? Beispielsweise ist 1+2=3 ein mathematisch korrekter Ausdruck (der sogar wahr ist), in jeder mir bekannten Programmiersprache aber sinnlos (Syntaxfehler).
Die Frage lautet:
Wie kann ich mit PHP alle diese Kombinationen auf ihre Gültigkeit überprüfen?
Was heißt Gültigkeit? Daß die Syntax stimmt, oder daß die Syntax stimmt und die Aussage wahr ist? Beispielsweise ist 1=+32 ein mathematisch korrekter Ausdruck, bloß stimmen tut's halt nicht.
Jedes gegebene Zeichen des Alphabets packe ich in eine Variable und permutiere diese in diversen Schleifen. Mein Gedanke: eval() über die Kombis drüberlaufen lassen und abfragen, wann die Auswertung true ergibt. Ich scheitere aber an der Umsetzung:
$a = 1; $b = "+"; $c = 2; $d = "=="; $e = 3;
if (eval ("$a$b$c$d$e;") == true)
Wenn Du das Dollarzeichen mit einem Backslash maskierst, wird nicht die Variable eingesetzt, sondern die Zeichenfolge (z.B. $a) für bare Münze genommen. Davon abgesehen: Bist Du sicher, daß immer true rauskommt, wenn der Ausdruck gültig ist? Denke daran, daß beim Rechnen auch mal 0 rauskommen oder ein Vergleich falsch ergeben kann.
Je nachdem, was Du unter gültig verstehst, ist es vermutlich einfacher, einen eigenen Parser zu schreiben, der den Ausdruck Zeichen für Zeichen durchgeht. Dazu mußt Du Dir allerdings erst einmal die passende Grammatik ausdenken.
Viele Grüße vom Længlich