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.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_79.png)
ops = {Plus, Subtract, Times, Divide};
Generieren Sie eine Liste von 4 zufällig aus einer Zahlengruppe ausgewählten Zahlen.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_80.png)
numbers = RandomChoice[{1, 2, 3, 5, 7, 10}, 4]
![](assets.de/test-your-numeracy-skills/O_82.png)
Die Summe dieser Zahlen und Operationen wird ebenfalls zufällig generiert.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_81.png)
total = RandomInteger[100]
![](assets.de/test-your-numeracy-skills/O_83.png)
Konstruieren Sie alle Varianten, die möglich sind, wenn jede Zahl einmal verwendet wird. Beachten Sie, dass die Reihenfolge mancher arithmetischer Operationen ausschlaggebend ist.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_82.png)
orderings = Flatten[Permutations /@ Subsets[numbers, {4}], 1]
![](assets.de/test-your-numeracy-skills/O_84.png)
Generieren Sie alle möglichen Kombinationen der Reihenfolge mit den festgelegten binären Verknüpfungen.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_83.png)
candidates = Groupings[orderings, ops -> 2, HoldForm];
Manche Kombinationen erzeugen ComplexInfinity-Nachrichten aufgrund der Division durch 0, und können mittels Quiet eliminiert werden.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_84.png)
results = Quiet@ReleaseHold[candidates];
Hier ist die Anzahl der Kombinationen, die die gewünschte Summe ergeben.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_85.png)
combinations = Thread[Equal[candidates, results]];
Count[Thread[Equal[candidates, results]], _ == total]
![](assets.de/test-your-numeracy-skills/O_85.png)
Das ist eine der möglichen Kombinationen.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_86.png)
FirstCase[combinations, _ == total]
![](assets.de/test-your-numeracy-skills/O_86.png)
In manchen Fällen ist es nicht möglich, die exakte Summe zu erhalten.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_87.png)
total2 = 76;
Count[combinations, _ == total2]
![](assets.de/test-your-numeracy-skills/O_87.png)
Sie können jedoch mit der Funktion Nearest nach den besten Approximierungen unter den Ergebnissen suchen.
![Click for copyable input](assets.de/test-your-numeracy-skills/In_88.png)
total2 = 76;
Count[combinations, _ == total2];
DeleteCases[results, ComplexInfinity];
DeleteDuplicates@Nearest[%, total2]
![](assets.de/test-your-numeracy-skills/O_88.png)