求解数字分解
新函数 Groupings 为生成将特定对象和操作组合可产生的可能结果提供了强大的方法. 特别对于求解一些如法国电视节目 Des chiffres et des lettres 中出现的数学游戏,或其他社交网络中流行的现代计算问题非常有用.
使用整数 1、1、5、8 和 4 种基本算术操作如何得到 10.
In[1]:=

ints = {1, 1, 5, 8};
ops = {Plus, Subtract, Times, Divide};
对于这 4 个整数和给定的二进制运算,共有 3840 种可能的组合.
In[2]:=

Length[combs = Groupings[Permutations[ints], ops -> 2, HoldForm]]
Out[2]=

以下为其中一些范例.
In[3]:=

RandomSample[combs, 10]
Out[3]=

计算每种组合的结果,其中很多涉及到被 0 除.
In[4]:=

results = Quiet@ReleaseHold[combs];
以下为得出 10 的唯一组合.
In[5]:=

Cases[Thread[Equal[combs, results]], _ == 10]
Out[5]=

最常见的结果是 13,由 240 不同方式生成.
In[6]:=

TakeLargestBy[Tally[results], Last, 5]
Out[6]=
