Linuchs: Rechenzeichen einsetzen

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

  1. 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

    --
    Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
    Toller Dampf voraus von Terry Pratchett
  2. 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.

    1. @@dedlfix

      … in 3 hoch 4 Iterationen.

      Hast du dich jetzt vertan oder ich?

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. 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.

  3. @@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 🖖

    --
    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
    1. 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

      1. 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.