AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lösungsweg für Denkaufgabe

Ein Thema von x000x · begonnen am 10. Feb 2012 · letzter Beitrag vom 11. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.999 Beiträge
 
Delphi 12 Athens
 
#1

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 09:33
Ja Bruteforce! Und ich würde es NICHT mit Delphi machen sondern mit Prolog.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 10:15
Hm schade, ich war der Meinung, dass es hierbei einen mathemetischen "Trick" gibt.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Gustav.R
(Gast)

n/a Beiträge
 
#3

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 10:41
[OT]

Ist 9live nicht Pleite gegangen?

[/OT]
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 10:59
Hm schade, ich war der Meinung, dass es hierbei einen mathemetischen "Trick" gibt.
Theoretisch gibt es bei dieser Aufgabe 256 Möglichkeiten. Praktisch läuft es auf weniger hinaus, da man hier irgendwie die Richtung erahnen kann. Wenn man die 8 und die 4 sieht und dann die Lösung 31 und denkt, dass 8 x 4 = 32 sind, und das im Kopf so erst stehen läßt (kann natürlich auch ein falsche Weg sein), dann reduzieren sich die Möglichkeiten. Dann kommen zuerst die Strichrechnungen 7 + 5 + 3 und 7 + 5 - 3 und dann 7 - 5 - 3. Und plötzlich sieht man die -1 und die 32 und die 31 vor dem geistigen Auge, so dass der Rest sich geradezu aufdrängt.

Ist natürlich auch etwas Glück dabei gleich am Anfang schon mal richtig gelegen zu haben.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 11:48
ich war der Meinung, dass es hierbei einen mathemetischen "Trick" gibt.
Es geht nur Brute Force; man könnte aber darauf achten dass zuerst wahrscheinliche Kombinationen von Operatoren getestet werden um möglichst schnell eine Lösung zu finden.
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:
function CalcNextOperators(previousOp:char):string;
begin
  case preOp of
    '+': Result := '-*/+';
    '-': Result := '+*/-';
    '*': Result := '+-/*';
    '/': Result := '+-*/;
else
Result :=
'+-*/';
end;
end;
Ausserdem kann man Divisionen ausschliesen bei denen ein ganzzahliger Rest übrigbleiben würde.
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.

Geändert von sx2008 (11. Feb 2012 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 12:43
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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 12:57
Mir würde da eine Systematik anstatt des <Random> besser gefallen
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 13:11
a.) ist letztendlich egal, denn irgendwann kommt alles dran
b.) wäre mehr Schreibarbeit im Quellcode gewesen
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#9

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 13:42
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 ist dafür auch wirklich nicht geeignet.

Prolog auch nicht, mMn. Lösung in Python, hat ca. 2 Minuten gedauert.

Code:
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)
Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.100 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Lösungsweg für Denkaufgabe

  Alt 11. Feb 2012, 15:24
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.
Angehängte Dateien
Dateityp: zip Test.zip (1,48 MB, 10x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 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