from itertools import combinations

# 所有可能的号码（01-35）
numbers = list(range(1, 36))

# 转换为组合（5个数）
all_combinations = list(combinations(numbers, 5))

# 定义组及匹配规则
groups = {
    1:  {"nums": [4, 6, 10, 13, 19, 20, 23, 25, 29, 33], "min": 1, "max": 1},
    2:  {"nums": [1, 2, 5, 6, 10, 11, 12, 15, 16, 20, 21, 22, 25, 26, 30, 31, 32], "min": 3, "max": 3},
    3:  {"nums": [2, 3, 6, 9, 10, 25, 26, 29, 30, 31, 34, 35], "min": 1, "max": 1},
    4:  {"nums": [3, 7, 9, 11, 17, 19, 21, 28, 31, 35], "min": 1, "max": 1},
    5:  {"nums": [3, 4, 13, 14, 19, 20, 24, 28, 32, 35], "min": 2, "max": 2},
    6: {"nums": [2, 5, 8, 10, 11, 13, 18, 21,  29], "min": 0, "max": 0}
}

# 其他规则函数
def valid_combo(combo):
    combo_set = set(combo)
    
    # 组匹配规则
    for group in groups.values():
        count = len(combo_set & set(group["nums"]))
        if not (group["min"] <= count <= group["max"]):
            return False
    
    # 奇偶比不能是0:5或5:0
    evens = sum(1 for n in combo if n % 2 == 0)
    odds = 5 - evens
    if evens == 0 or odds == 0:
        return False

    # 区间比为1:2:2
    zone1 = sum(1 for n in combo if 1 <= n <= 12)
    zone2 = sum(1 for n in combo if 13 <= n <= 24)
    zone3 = sum(1 for n in combo if 25 <= n <= 35)
    if (zone1, zone2, zone3) != (2, 1, 2):
        return False

    # 和值限制
    total = sum(combo)
    if total <= 44 or total in [47,63,77,80,83,88,89,90,101,105,117]:
        return False

    return True

# 过滤组合
valid_combinations = [" ".join(f"{n:02d}" for n in combo) for combo in all_combinations if valid_combo(combo)]

len(valid_combinations), valid_combinations[:50]  # 限制显示前50组结果
