Python组合reducer v, k, t算法

问题描述 投票:0回答:0

我正在尝试创建在该网站上找到的这种组合减少算法:https://lotterywheels.io/

示例:

v=12,k=8,t=7

=> 126个组合(彩票)如果抽到7/12,保证赢7/8。

v=12,k=10,t=8

=> 118 种组合 如果抽到 8/12,则保证获胜 8/10。

我正在尝试在 Python 中执行此操作,这就是我到目前为止所做的:

from itertools import combinations

v=12
k=10
t=8

def reducer_func(v, k, t):
    nums =[x for x in range(1, v+1)]
    
    cmb6 = [cmb for cmb in combinations(nums, 8)]
    
    cmb7 = [cmb for cmb in combinations(nums, k)]
    
    final = []
    
    i=1
    while i<len(cmb7)+1:
        tmp = cmb7[0:i]
        completed=False
        s=[]
        c=set()
        for big in tmp:
            # check to see if all small are matched:
            for small in cmb6:
                if set(small).issubset(big):
                    c.add(small)
        if len(c)==len(cmb6):
            break
        else:
            i+=1
    return tmp

g = reducer_func(v, k, t)
print(len(g))
for i in g:
    print(i)

但是结果不同,例如,对于 v=12、k=10、t=8,它给出 45 种组合,而不是上面预期的组合。

大约几个月前我正在思考/尝试创建这样的算法,但我不知道应该如何完成。

提前谢谢您!

python python-3.x combinations
© www.soinside.com 2019 - 2024. All rights reserved.