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.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_81.png)
ops = {Plus, Subtract, Times, Divide};
Genere una lista de 4 números elegidos al azar en un conjunto dado de números.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_82.png)
numbers = RandomChoice[{1, 2, 3, 5, 7, 10}, 4]
![](assets.es/test-your-numeracy-skills/O_84.png)
El total a obtener de estos números y operaciones es también generado al azar.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_83.png)
total = RandomInteger[100]
![](assets.es/test-your-numeracy-skills/O_85.png)
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.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_84.png)
orderings = Flatten[Permutations /@ Subsets[numbers, {4}], 1]
![](assets.es/test-your-numeracy-skills/O_86.png)
Genere todas las operaciones posibles de cada ordenamiento con las operaciones binarias dadas.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_85.png)
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.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_86.png)
results = Quiet@ReleaseHold[candidates];
Aquí hay combinaciones de número que producen el total solicitado.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_87.png)
combinations = Thread[Equal[candidates, results]];
Count[Thread[Equal[candidates, results]], _ == total]
![](assets.es/test-your-numeracy-skills/O_87.png)
Ésta es una de las posibles combinaciones.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_88.png)
FirstCase[combinations, _ == total]
![](assets.es/test-your-numeracy-skills/O_88.png)
Puede que no sea posible obtener el total exacto en algunos casos.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_89.png)
total2 = 76;
Count[combinations, _ == total2]
![](assets.es/test-your-numeracy-skills/O_89.png)
Pero usted puede buscar las mejores aproximaciones entre los resultados usando la función Nearest.
![Click for copyable input](assets.es/test-your-numeracy-skills/In_90.png)
total2 = 76;
Count[combinations, _ == total2];
DeleteCases[results, ComplexInfinity];
DeleteDuplicates@Nearest[%, total2]
![](assets.es/test-your-numeracy-skills/O_90.png)