计算用y边轧制x模具的所有可能总和



我正在编写一个函数,帮助我计算将一个具有可变边数的可变数量的模具相加的可能结果(例如,两个六边模具和一个四边模具的总和(,我已经被难住了一段时间。

例如,轧制两个三面模具应该输出一个具有所有9种可能组合的阵列:

[[1,1],
[1,2], 
[1,3],
[2,1],
(etc.)
[3,2],
[3,3]]

我想不通。我已经设法生成了要枚举的范围,但我做不到。

dice = [6,6]
diceRanges = [range(0, die) for die in dice]
diceIndex = [0 for die in dice]
outcomes = []
for idx, rng in enumerate(diceRanges):
for var in rng:
diceIndex[idx] = var
outcomes.append([val for val in diceIndex])

outcomes

我见过周围的一些事情,但从来没有看起来那么简单。

干杯

如果您使用itertools:,这很简单

import itertools
outcomes = list(itertools.product(*diceRanges))

仅使用numpy

dice_sides = 6
dices_values = np.arange(1,dice_sides+1)
outcome =  np.dstack(np.meshgrid(dices_values, dices_values)).reshape(-1,2)
Out[313]:
array([[1, 1],
[2, 1],
[3, 1],
[4, 1],
[5, 1],
[6, 1],
[1, 2],
[2, 2],
[3, 2],
[4, 2],
[5, 2],
[6, 2],
[1, 3],
[2, 3],
[3, 3],
[4, 3],
[5, 3],
[6, 3],
[1, 4],
[2, 4],
[3, 4],
[4, 4],
[5, 4],
[6, 4],
[1, 5],
[2, 5],
[3, 5],
[4, 5],
[5, 5],
[6, 5],
[1, 6],
[2, 6],
[3, 6],
[4, 6],
[5, 6],
[6, 6]])

最新更新