Wolfram Language

Kern-Sprache

Testen Sie Ihre Rechenkünste

Die Französische TV-Sendung Des chiffres et des lettres und ihre Englische Adaption Countdown testen die Rechenkünste von Kandidaten. Konstruieren Sie eine einfache Version dieses Spiels und lösen Sie es mit der neuen Funktion Groupings.

Spezifizieren Sie die arithmetischen Operationen, die zum Lösen der Aufgabe verwendet werden dürfen.

In[1]:=
Click for copyable input
ops = {Plus, Subtract, Times, Divide};

Generieren Sie eine Liste von 4 zufällig aus einer Zahlengruppe ausgewählten Zahlen.

In[2]:=
Click for copyable input
numbers = RandomChoice[{1, 2, 3, 5, 7, 10}, 4]
Out[2]=

Die Summe dieser Zahlen und Operationen wird ebenfalls zufällig generiert.

In[3]:=
Click for copyable input
total = RandomInteger[100]
Out[3]=

Konstruieren Sie alle Varianten, die möglich sind, wenn jede Zahl einmal verwendet wird. Beachten Sie, dass die Reihenfolge mancher arithmetischer Operationen ausschlaggebend ist.

In[4]:=
Click for copyable input
orderings = Flatten[Permutations /@ Subsets[numbers, {4}], 1]
Out[4]=

Generieren Sie alle möglichen Kombinationen der Reihenfolge mit den festgelegten binären Verknüpfungen.

In[5]:=
Click for copyable input
candidates = Groupings[orderings, ops -> 2, HoldForm];

Manche Kombinationen erzeugen ComplexInfinity-Nachrichten aufgrund der Division durch 0, und können mittels Quiet eliminiert werden.

In[6]:=
Click for copyable input
results = Quiet@ReleaseHold[candidates];

Hier ist die Anzahl der Kombinationen, die die gewünschte Summe ergeben.

In[7]:=
Click for copyable input
combinations = Thread[Equal[candidates, results]]; Count[Thread[Equal[candidates, results]], _ == total]
Out[7]=

Das ist eine der möglichen Kombinationen.

In[8]:=
Click for copyable input
FirstCase[combinations, _ == total]
Out[8]=

In manchen Fällen ist es nicht möglich, die exakte Summe zu erhalten.

In[9]:=
Click for copyable input
total2 = 76; Count[combinations, _ == total2]
Out[9]=

Sie können jedoch mit der Funktion Nearest nach den besten Approximierungen unter den Ergebnissen suchen.

In[10]:=
Click for copyable input
total2 = 76; Count[combinations, _ == total2]; DeleteCases[results, ComplexInfinity]; DeleteDuplicates@Nearest[%, total2]
Out[10]=

Verwandte Beispiele

en es fr ja ko pt-br ru zh