Wolfram Language

Langage de base

Testez vos compétences en numératie

Le programme de télévision française Des chiffres et des lettres et son adaptation anglaise "Countdown" testent les compétences en numératie des concurrents. Construisons une version simple de ce jeu, et résolvons-le avec la nouvelle fonction Groupings.

Spécifiez les opérations arithmétiques qui peuvent être utilisées pour effectuer les calculs.

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

Générez une liste de 4 nombres choisis au hasard à partir d'un ensemble donné de nombres.

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

Le total à obtenir à partir de ces nombres et des opérations est également généré de façon aléatoire.

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

Construisez tous les moyens possibles de l'utilisation de chaque nombre au plus une fois, en gardant à l'esprit que l'ordre est important pour certaines des opérations arithmétiques.

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

Générez ensuite toutes les combinaisons possibles de chaque ordre avec les opérations binaires données.

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

Certains candidats produisent ComplexInfinity en raison de la division par zéro, donc nous évaluons tous les groupements avec un Quiet.

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

Voici le nombre de combinaisons produisant le total demandé.

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

Ceci est une des combinaisons possibles.

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

Il peut ne pas être possible d'obtenir le total exact dans certains cas.

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

Mais nous pouvons chercher les meilleures approximations parmi les résultats en utilisant la fonction Nearest.

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

Exemples connexes

de en es ja ko pt-br ru zh