Wolfram Language

Lenguaje de núcleo

Pruebe sus habilidades numéricas

El programa francés de TV Des Chiffres et des Lettres y su adaptación al inglés Countdown prueba a los concursantes en sus habilidades numéricas. Construya una simple versión de este juego y resuélvalo con la nueva función Groupings.

Especifique las operaciones aritméticas que pueden ser utilizadas para realizar los cálculos.

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

Genere una lista de 4 números elegidos al azar en un conjunto dado de números.

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

El total a obtener de estos números y operaciones es también generado al azar.

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

Construya todas las posibles formas de usar cada número una vez, tomando en cuenta que el orden importa para algunas de las operaciones aritméticas.

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

Genere todas las operaciones posibles de cada ordenamiento con las operaciones binarias dadas.

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

Algunos candidatos producen mensajes de ComplexInfinity debido a una división con 0, y ellos pueden ser eliminado usando Quiet.

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

Aquí hay combinaciones de número que producen el total solicitado.

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

Ésta es una de las posibles combinaciones.

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

Puede que no sea posible obtener el total exacto en algunos casos.

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

Pero usted puede buscar las mejores aproximaciones entre los resultados usando la función Nearest.

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

Ejemplos relacionados

de en fr ja ko pt-br ru zh