求解数字分解
新函数 Groupings 为生成将特定对象和操作组合可产生的可能结果提供了强大的方法. 特别对于求解一些如法国电视节目 Des chiffres et des lettres 中出现的数学游戏,或其他社交网络中流行的现代计算问题非常有用.
使用整数 1、1、5、8 和 4 种基本算术操作如何得到 10.
In[1]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_78.png)
ints = {1, 1, 5, 8};
ops = {Plus, Subtract, Times, Divide};
对于这 4 个整数和给定的二进制运算,共有 3840 种可能的组合.
In[2]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_79.png)
Length[combs = Groupings[Permutations[ints], ops -> 2, HoldForm]]
Out[2]=
![](assets.zh/solve-a-number-decomposition/O_70.png)
以下为其中一些范例.
In[3]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_80.png)
RandomSample[combs, 10]
Out[3]=
![](assets.zh/solve-a-number-decomposition/O_71.png)
计算每种组合的结果,其中很多涉及到被 0 除.
In[4]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_81.png)
results = Quiet@ReleaseHold[combs];
以下为得出 10 的唯一组合.
In[5]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_82.png)
Cases[Thread[Equal[combs, results]], _ == 10]
Out[5]=
![](assets.zh/solve-a-number-decomposition/O_72.png)
最常见的结果是 13,由 240 不同方式生成.
In[6]:=
![Click for copyable input](assets.zh/solve-a-number-decomposition/In_83.png)
TakeLargestBy[Tally[results], Last, 5]
Out[6]=
![](assets.zh/solve-a-number-decomposition/O_73.png)