Rolf b: Rechenzeichen einsetzen

Beitrag lesen

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