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 de nombres donné.

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

Le total obtenu à partir de ces nombres et de ces opérations est également généré de manière aléatoire.

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

Construisez toutes les façons possibles d'utiliser chaque nombre une fois, en gardant à l'esprit que l'ordre a de l'importance pour certaines 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 des ComplexInfinity en raison de la division par 0. Ces messages peuvent être éliminés en utilisant 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]=

Voici une des combinaisons possibles.

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

Dans certains cas, il n'est pas possible d'obtenir le total exact.

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