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.

ops = {Plus, Subtract, Times, Divide};
Generieren Sie eine Liste von 4 zufällig aus einer Zahlengruppe ausgewählten Zahlen.

numbers = RandomChoice[{1, 2, 3, 5, 7, 10}, 4]

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

total = RandomInteger[100]

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

orderings = Flatten[Permutations /@ Subsets[numbers, {4}], 1]

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

candidates = Groupings[orderings, ops -> 2, HoldForm];
Manche Kombinationen erzeugen ComplexInfinity-Nachrichten aufgrund der Division durch 0, und können mittels Quiet eliminiert werden.

results = Quiet@ReleaseHold[candidates];
Hier ist die Anzahl der Kombinationen, die die gewünschte Summe ergeben.

combinations = Thread[Equal[candidates, results]];
Count[Thread[Equal[candidates, results]], _ == total]

Das ist eine der möglichen Kombinationen.

FirstCase[combinations, _ == total]

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

total2 = 76;
Count[combinations, _ == total2]

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

total2 = 76;
Count[combinations, _ == total2];
DeleteCases[results, ComplexInfinity];
DeleteDuplicates@Nearest[%, total2]
