![]() |
AW: Lösungsweg für Denkaufgabe
Zitat:
Zwei oder mehr gleiche Operatoren hintereinander würde ich als unwahrscheinlich bezeichnen. Die Reihenfolge wie ein Operator getestet wird hängt also vom Vorgängeroperator ab.
Delphi-Quellcode:
Ausserdem kann man Divisionen ausschliesen bei denen ein ganzzahliger Rest übrigbleiben würde.
function CalcNextOperators(previousOp:char):string;
begin case preOp of '+': Result := '-*/+'; '-': Result := '+*/-'; '*': Result := '+-/*'; '/': Result := '+-*/; else Result := '+-*/'; end; end; Jede Division, die man ausschliesen kann, reduziert die Anzahl der Tests um den Faktor 3/4. Bei deinem Beispiel wäre nur 8 /4 möglich; also kann man 3 Divisionen ausschliesen. |
AW: Lösungsweg für Denkaufgabe
Einfach geht nicht, trotz Brute Force, denn das kleine Beispiel ist zwar ok, beachtet aber kein Punkt vor Strich. Deshalb führt es nicht zum Erfolg. Letztendlich kommt man um einem Mathparser der die Komplettformel richtig berechnet nicht herum.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
function r(x, y: Double; z: Char): Double; begin case z of '+': Result := x + y; '-': Result := x - y; '*': Result := x * y; '/': Result := x / y; else Result := x; end; end; const o = '+-*/'; var a, b, c, d: Char; begin repeat a := o[Random(4) + 1]; b := o[Random(4) + 1]; c := o[Random(4) + 1]; d := o[Random(4) + 1]; until r(r(r(r(7, 5, a), 3, b), 8, c), 4, d) = 31; ShowMessage(a+b+c+d); end; //7 5 3 8 4 = 31 |
AW: Lösungsweg für Denkaufgabe
Mir würde da eine Systematik anstatt des <Random> besser gefallen ;-)
|
AW: Lösungsweg für Denkaufgabe
a.) ist letztendlich egal, denn irgendwann kommt alles dran
b.) wäre mehr Schreibarbeit im Quellcode gewesen ;) |
AW: Lösungsweg für Denkaufgabe
Zitat:
Prolog auch nicht, mMn. Lösung in Python, hat ca. 2 Minuten gedauert.
Code:
Liebe Grüße,
e = 31
s = ["7.0", "5.0", "3.0", "8.0", "4.0"] o = [" + ", " - ", " * ", " / "] for a in o: for b in o: for c in o: for d in o: t = s[0] + a + s[1] + b + s[2] + c + s[3] + d + s[4] if eval(t) == e: print t.replace(".0", "") + " = " + str(e) Valentin |
AW: Lösungsweg für Denkaufgabe
Zitat:
Zitat:
Zitat:
Wenn du hart drauf bist, dann kannst'e es auch gerne mit Potenzen und Wurzeln rumspielen und noch ein zusätzliches - (negieren) der Werte Zitat:
Und da nur die Operatoren fehlen, sind alle Klammern vorhanden, bzw. es gibt keine. Theoretisch müßte man doch den Formelparser der neuen XE2-LiveBindings nutzen können? |
AW: Lösungsweg für Denkaufgabe
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal was zusammengefrickelt.
Etwas umständlich das Ganze, weil ich den größten Teil aus einem Parserprogramm übernommen habe. Es scheint aber zu funktionieren und auch mit angemessener Laufzeit. Wie gehts? 1) In das Editfeld die Aufgabe eingeben, wie in #1 gezeigt, also z.B. 7 5 3 8 4 = 31 2) Start klicken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz