fork download
  1. from itertools import combinations
  2.  
  3. # 所有可能的号码(01-35)
  4. numbers = list(range(1, 36))
  5.  
  6. # 转换为组合(5个数)
  7. all_combinations = list(combinations(numbers, 5))
  8.  
  9. # 定义组及匹配规则
  10. groups = {
  11. 1: {"nums": [4, 6, 10, 13, 19, 20, 23, 25, 29, 33], "min": 1, "max": 1},
  12. 2: {"nums": [1, 2, 5, 6, 10, 11, 12, 15, 16, 20, 21, 22, 25, 26, 30, 31, 32], "min": 3, "max": 3},
  13. 3: {"nums": [2, 3, 6, 9, 10, 25, 26, 29, 30, 31, 34, 35], "min": 1, "max": 1},
  14. 4: {"nums": [3, 7, 9, 11, 17, 19, 21, 28, 31, 35], "min": 1, "max": 1},
  15. 5: {"nums": [3, 4, 13, 14, 19, 20, 24, 28, 32, 35], "min": 2, "max": 2},
  16. 6: {"nums": [2, 5, 8, 10, 11, 13, 18, 21, 29], "min": 0, "max": 0}
  17. }
  18.  
  19. # 其他规则函数
  20. def valid_combo(combo):
  21. combo_set = set(combo)
  22.  
  23. # 组匹配规则
  24. for group in groups.values():
  25. count = len(combo_set & set(group["nums"]))
  26. if not (group["min"] <= count <= group["max"]):
  27. return False
  28.  
  29. # 奇偶比不能是0:5或5:0
  30. evens = sum(1 for n in combo if n % 2 == 0)
  31. odds = 5 - evens
  32. if evens == 0 or odds == 0:
  33. return False
  34.  
  35. # 区间比为1:2:2
  36. zone1 = sum(1 for n in combo if 1 <= n <= 12)
  37. zone2 = sum(1 for n in combo if 13 <= n <= 24)
  38. zone3 = sum(1 for n in combo if 25 <= n <= 35)
  39. if (zone1, zone2, zone3) != (2, 1, 2):
  40. return False
  41.  
  42. # 和值限制
  43. total = sum(combo)
  44. if total <= 44 or total in [47,63,77,80,83,88,89,90,101,105,117]:
  45. return False
  46.  
  47. return True
  48.  
  49. # 过滤组合
  50. valid_combinations = [" ".join(f"{n:02d}" for n in combo) for combo in all_combinations if valid_combo(combo)]
  51.  
  52. len(valid_combinations), valid_combinations[:50] # 限制显示前50组结果
  53.  
Success #stdin #stdout 0.76s 40992KB
stdin
Standard input is empty
stdout
Standard output is empty