|
@@ -34,43 +34,52 @@ function GetAllParts (noteList, passDict) {
|
34
|
34
|
passDict.level8,
|
35
|
35
|
]
|
36
|
36
|
|
37
|
|
- // 总投注场次, 比如选了 4 场
|
38
|
|
- const noteLength = noteList.length
|
39
|
|
-
|
40
|
37
|
// 整理数据
|
|
38
|
+ // [a, b, c, d] => [[a], [b1, b2], [c1, c2], [d]] == [A, B, C, D]
|
41
|
39
|
const noteArr = noteList.map(x => x.detailList.map(y => ({ ...x, detail: y })))
|
42
|
40
|
|
43
|
|
- debugger
|
44
|
|
-
|
45
|
41
|
// 从投注场次中, 选择过关场次组合
|
46
|
42
|
// 比如投注4场比赛, 过关方式为3串4
|
47
|
|
- // 这个步骤确定了场次的组合方式
|
48
|
|
- const noCompact = combination(noteArr, passDict.unitNum)
|
49
|
|
-
|
50
|
|
- // 场次组合完成, 下面需要算出每种场次的 3串4 的方式
|
51
|
|
- // 比如场次 A,B,C 或者 A,B,D 三场, 每种如何组成 3 串 4
|
52
|
|
- // 这个步骤确定了每个场次组合方式的投注组合方式
|
53
|
|
- const all = noCompact.map(list => {
|
54
|
|
- return passArr.map((pass, inx) => {
|
55
|
|
- if (!pass) return undefined
|
56
|
|
-
|
57
|
|
- // level1 的 inx 是 0, 但是实际上场次要求是 1
|
58
|
|
- return combination(list, inx + 1)
|
59
|
|
- }).filter(Boolean)
|
60
|
|
- }).reduce((acc, each) => {
|
61
|
|
- const crossSubItem = each.map(x => x.map(y => descartes(...y)))
|
62
|
|
- const foo = crossSubItem.map(x => descartes(...x))
|
63
|
|
- const cross = descartes(...foo)
|
64
|
|
-
|
|
43
|
+ // [A, B, C, D] =>
|
|
44
|
+ // [[A, B, C],
|
|
45
|
+ // [A, B, D],
|
|
46
|
+ // [A, C, D],
|
|
47
|
+ // [B, C, D]]
|
|
48
|
+ const composeNote = combination(noteArr, passDict.unitNum)
|
|
49
|
+
|
|
50
|
+ // 拆分场次组合
|
|
51
|
+ const disposeNote = composeNote.reduce((acc, note) => {
|
|
52
|
+ // [A, B, C] =>
|
|
53
|
+ // [a, b1, c1],
|
|
54
|
+ // [a, b1, c2],
|
|
55
|
+ // [a, b2, c1],
|
|
56
|
+ // [a, b2, c2]
|
|
57
|
+ const unpack = descartes(...note)
|
65
|
58
|
return [
|
66
|
59
|
...acc,
|
67
|
|
- cross
|
|
60
|
+ ...unpack
|
68
|
61
|
]
|
69
|
62
|
}, [])
|
70
|
63
|
|
71
|
|
- // 把所有场次的组合方式展平
|
72
|
|
- const result = all.reduce((acc, list) => ([...acc, ...list]), [])
|
73
|
|
- return result
|
|
64
|
+ // 组合过关场景
|
|
65
|
+ const allParts = disposeNote.map(noteGrp => {
|
|
66
|
+ // 比如 3串4 = 3个2串1 + 1个3串1
|
|
67
|
+ // [a, b, c] =>
|
|
68
|
+ // [[a, b],
|
|
69
|
+ // [a, c],
|
|
70
|
+ // [b, c],
|
|
71
|
+ // [a, b, c]]
|
|
72
|
+ return passArr.map((passNum, inx) => {
|
|
73
|
+ // 当前关卡不需要场次
|
|
74
|
+ if (!passNum) return undefined
|
|
75
|
+
|
|
76
|
+ const requreNum = inx + 1
|
|
77
|
+ return combination(noteGrp, requreNum)
|
|
78
|
+ }).filter(Boolean).reduce((acc, grp) => ([...acc, ...grp]), [])
|
|
79
|
+ })
|
|
80
|
+
|
|
81
|
+ const sum = allParts.reduce((s, x) => s + x.length, 0)
|
|
82
|
+ return { sum, allParts }
|
74
|
83
|
}
|
75
|
84
|
|
76
|
85
|
// 遍历模拟比赛获取最大, 最小奖金
|