Rechenzeichen einsetzen
Linuchs
- rechnen
0 Auge0 dedlfix0 Gunnar Bittersmann
In der folgenden Aufgabe sind die Rechenzeichen + - * / zu setzen. Punktrechnung vor Strichrechnung:
10 _ 5 _ 3 _ 2 = 21
Mir scheint, die Aufgabe ist mit Probieren nicht lösbar. Wie geht man sowas gezielt an? Wie könnte man nachweisen, dass sie nicht lösbar ist?
Linuchs
Hallo
In der folgenden Aufgabe sind die Rechenzeichen + - * / zu setzen. Punktrechnung vor Strichrechnung:
10 _ 5 _ 3 _ 2 = 21
Mir scheint, die Aufgabe ist mit Probieren nicht lösbar.
Nicht? 10 + 5 + 3 * 2 = 10 + 5 + 6 = 21
Tschö, Auge
Tach!
In der folgenden Aufgabe sind die Rechenzeichen + - * / zu setzen. Punktrechnung vor Strichrechnung:
10 _ 5 _ 3 _ 2 = 21
Mir scheint, die Aufgabe ist mit Probieren nicht lösbar. Wie geht man sowas gezielt an?
Bei der geringen Menge mit Brute Force in 3 hoch 4 Iterationen.
dedlfix.
@@dedlfix
… in 3 hoch 4 Iterationen.
Hast du dich jetzt vertan oder ich?
LLAP 🖖
Tach!
… in 3 hoch 4 Iterationen.
Hast du dich jetzt vertan oder ich?
Die 4 muss in die Basis, wie die 2 beim Binärsystem.
dedlfix.
@@Linuchs
In der folgenden Aufgabe sind die Rechenzeichen + - * / zu setzen. Punktrechnung vor Strichrechnung:
10 _ 5 _ 3 _ 2 = 21
Mir scheint, die Aufgabe ist mit Probieren nicht lösbar.
Nicht? 3 Positionen mit jeweils einem aus 4 Rechenzeichen zu füllen ergibt 4³ = 64 Kombinationen. Ein Computer kann das in einem Bruchteil eines Wimpernschlags; ein entsprechendes Programm dazu ist auch schnell geschrieben.
Selbst die 64 Kombinationen ohne Computer durchzuspielen ist Minutensache.
LLAP 🖖
Da Arrow-Functions seit letztem Jahr ganz gut unterstützt werden, benutze ich sie mal für eine Lösung, die alle Ergebnisse nach Wert sortiert auswirft. Sie braucht nur ein Ausgabe-Element im HTML, das id="out" trägt. Wie hier zum Beispiel.
Statt eval hätte man sicherlich auch eine Funktionale Lösung bauen können, aber dann wäre die Beachtung von punkt-vor-strich schwieriger gewesen und - tja - ich denke, eval ist gerade für sowas hier gemacht.
var ops = [ '+', '-', '*', '/'];
var results = [];
ops.forEach(o1 => ops.forEach(o2 => ops.forEach (o3 => {
var exp = "10 " + o1 + " 5 " + o2 + " 3 " + o3 + " 2 ";
results.push( { exp: exp, val: eval(exp) } );
} )));
var o = document.getElementById("out");
results.sort( (a,b) => ( a.val < b.val) ? -1 : (a.val > b.val) ? 1 : 0)
.forEach(r => o.innerText += "\n" + r.exp + ": " + r.val);
ergibt
10 - 5 * 3 * 2 : -20
10 - 5 * 3 - 2 : -7
10 / 5 - 3 * 2 : -4
10 - 5 * 3 + 2 : -3
10 / 5 - 3 - 2 : -3
10 / 5 / 3 - 2 : -1.3333333333333335
10 - 5 - 3 * 2 : -1
10 - 5 - 3 - 2 : 0
10 / 5 / 3 / 2 : 0.3333333333333333
10 / 5 - 3 / 2 : 0.5
10 / 5 - 3 + 2 : 1
10 / 5 / 3 * 2 : 1.3333333333333333
10 - 5 * 3 / 2 : 2.5
10 / 5 / 3 + 2 : 2.6666666666666665
10 / 5 * 3 / 2 : 3
10 / 5 + 3 - 2 : 3
10 / 5 + 3 / 2 : 3.5
10 - 5 - 3 / 2 : 3.5
10 - 5 - 3 + 2 : 4
10 / 5 * 3 - 2 : 4
10 - 5 + 3 - 2 : 6
10 - 5 / 3 - 2 : 6.333333333333334
10 - 5 + 3 / 2 : 6.5
10 - 5 / 3 * 2 : 6.666666666666666
10 / 5 + 3 + 2 : 7
10 / 5 * 3 + 2 : 8
10 / 5 + 3 * 2 : 8
10 * 5 / 3 / 2 : 8.333333333333334
10 + 5 - 3 * 2 : 9
10 - 5 / 3 / 2 : 9.166666666666666
10 + 5 / 3 - 2 : 9.666666666666666
10 + 5 - 3 - 2 : 10
10 - 5 + 3 + 2 : 10
10 - 5 / 3 + 2 : 10.333333333333334
10 + 5 / 3 / 2 : 10.833333333333334
10 - 5 + 3 * 2 : 11
10 / 5 * 3 * 2 : 12
10 + 5 / 3 * 2 : 13.333333333333334
10 + 5 - 3 / 2 : 13.5
10 + 5 / 3 + 2 : 13.666666666666666
10 + 5 - 3 + 2 : 14
10 * 5 / 3 - 2 : 14.666666666666668
10 + 5 + 3 - 2 : 16
10 + 5 + 3 / 2 : 16.5
10 + 5 * 3 / 2 : 17.5
10 * 5 / 3 + 2 : 18.666666666666668
10 + 5 + 3 + 2 : 20
10 + 5 + 3 * 2 : 21
10 + 5 * 3 - 2 : 23
10 + 5 * 3 + 2 : 27
10 * 5 / 3 * 2 : 33.333333333333336
10 + 5 * 3 * 2 : 40
10 * 5 - 3 * 2 : 44
10 * 5 - 3 - 2 : 45
10 * 5 - 3 / 2 : 48.5
10 * 5 - 3 + 2 : 49
10 * 5 + 3 - 2 : 51
10 * 5 + 3 / 2 : 51.5
10 * 5 + 3 + 2 : 55
10 * 5 + 3 * 2 : 56
10 * 5 * 3 / 2 : 75
10 * 5 * 3 - 2 : 148
10 * 5 * 3 + 2 : 152
10 * 5 * 3 * 2 : 300
Rolf
Tach!
results.sort( (a,b) => ( a.val < b.val) ? -1 : (a.val > b.val) ? 1 : 0)
Das Vergleichen von numerischen Werten für die üblichen Implementationen der sort-Funktionen geht mit einer einzelnen Subtraktion einfacher: (a,b) => a.val - b.val
.
dedlfix.