Tuples Mathematica收集列表中的元素

Tuples Mathematica收集列表中的元素,tuples,wolfram-mathematica,filtering,counting,Tuples,Wolfram Mathematica,Filtering,Counting,给定由以下内容生成的256个元组: Tuples[{a,b,c,d},4] = {{a,a,a,a},{a,a,a,b}...,{d,d,d,d}} 我想过滤所有有3个元组的元组。例如,我想保持{c,b,c,c}&{a,a,d,a}等等。。但不是{d,d,d}或{a,b,b,c} 我知道有: Binomial[4,3]*4*3 = 48 这些元组来自简单的数学。但我正在寻找一种程序化的计算方法 我的最终目标来自元组: Tuples[{1,2,3,...,n},k] 我想知道这些元组中有多少

给定由以下内容生成的256个元组:

Tuples[{a,b,c,d},4] = {{a,a,a,a},{a,a,a,b}...,{d,d,d,d}}
我想过滤所有有3个元组的元组。例如,我想保持{c,b,c,c}&{a,a,d,a}等等。。但不是{d,d,d}或{a,b,b,c}

我知道有:

Binomial[4,3]*4*3 = 48
这些元组来自简单的数学。但我正在寻找一种程序化的计算方法

我的最终目标来自元组:

Tuples[{1,2,3,...,n},k]
我想知道这些元组中有多少元组正好有一个子组,其中m是一种类型,而其他所有子组的大小都小于m


如果您感兴趣,这个问题是由以下问题引起的:在游戏“反人类牌””中有赢家之前的平均回合数是多少?假设我们有n个玩家,第一个有x张牌的人获胜。

这将找到您的48个元组

Select[Tuples[{a, b, c, d}, 4], 
  MatchQ[Sort[#], {a_, a_, a_, b_} | {b_, a_, a_, a_}] && 
  Length[Union[#]] != 1 &]
这将显示超过1、…、6的四个项的元组,其中有m个相同项,所有其他项出现的次数少于m次

m = 2;
f[v_] := Module[{runlens},
  runlens = Sort[Map[Length, Split[Sort[v]]]]; 
  runlens[[-1]] == m && If[Length[runlens] == 1, True, runlens[[-2]] < m]]
];
Select[Tuples[Range[6], 4], f]
m=2;
f[v_]:=模块[{runlens},
runlens=Sort[Map[Length,Split[Sort[v]]];
runlens[[-1]]==m&&If[Length[runlens]==1,True,runlens[[-2]]
使用Count on这个结果,你就知道你有多少了。

另一种方法:

Select[ Tuples[{a, b, c, d}, 4] ,
 ((Count[#, 3] == 1 && Max[#] == 3) &@Tally[#][[All, 2]] ) & ]

当然,如果设置的大小大于列表长度的一半,那么检查
Max
Count

是多余的,我知道你做了些什么,但还是有点不知所措。我想花点时间更好地理解它。起初我不认为MatchQ会接手这个案子a,b,a,a或a,a,b等等。。但确实如此。尽管如此,这真是太棒了!非常感谢你。你甚至在更一般的情况下展示了某人如何着手解决这个问题。再次感谢!你应该考虑做一个关于UMMy或一些东西的高级Mathematica课程。我认为很难找到像这样好的内容,你可能正在填补一个空缺。
Extract[#,{First[#]}&/@Position[Tally/@#,{uz,3}]&@Tuples[{a,b,c,d},4]
你知道这个网站吗?