-
Notifications
You must be signed in to change notification settings - Fork 0
/
S3.5.py
314 lines (300 loc) · 8.51 KB
/
S3.5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
#!/usr/bin/env python3
#-*-coding:utf-8-*-
import itertools
from time import time
from tqdm import tqdm
start = time()
class Hero():
'''英雄属性'''
def __init__(self, cost, name, origin, class_):
# 等级
self.cost = cost
# 名称
self.name = name
# 种族
self.origin = origin
# 职业
self.class_ = class_
崔斯特 = Hero(1, '崔斯特', '未来战士', '法师')
凯特琳 = Hero(1, '凯特琳', '未来战士', '狙神')
墨菲特 = Hero(1, '墨菲特', '奥德赛', '斗士')
魔腾 = Hero(1, '魔腾', '战地机甲', '刺客')
嘉文四世 = Hero(1, '嘉文四世', '暗星', '圣盾使')
波比 = Hero(1, '波比', '星之守护者', '重装战士')
蕾欧娜 = Hero(1, '蕾欧娜', '源计划', '重装战士')
格雷福斯 = Hero(1, '格雷福斯', '太空海盗', '强袭枪手')
菲奥娜 = Hero(1, '菲奥娜', '源计划', '剑士')
吉格斯 = Hero(1, '吉格斯', '奥德赛', '爆破专家')
佐伊 = Hero(1, '佐伊', '星之守护者', '法师')
俄洛伊 = Hero(1, '俄洛伊', '战地机甲', '斗士')
霞 = Hero(1, '霞', '星神', '剑士')
安妮 = Hero(2, '安妮', '银河魔装机神', '法师')
赵信 = Hero(2, '赵信', '星神', '圣盾使')
布里茨 = Hero(2, '布里茨', '未来战士', '斗士')
莫德凯撒 = Hero(2, '莫德凯撒', '暗星', '重装战士')
克格莫 = Hero(2, '克格莫', '战地机甲', '强袭枪手')
慎 = Hero(2, '慎', '未来战士', '剑士')
阿狸 = Hero(2, '阿狸', '星之守护者', '法师')
诺提勒斯 = Hero(2, '诺提勒斯', '宇航员', '重装战士')
德莱厄斯 = Hero(2, '德莱厄斯', '太空海盗', '破法战士')
亚索 = Hero(2, '亚索', '奥德赛', '剑士')
卢锡安 = Hero(2, '卢锡安', '源计划', '强袭枪手')
劫 = Hero(2, '劫', '奥德赛', '刺客')
洛 = Hero(2, '洛', '星神', '圣盾使')
易 = Hero(3, '易', '奥德赛', '剑士')
艾希 = Hero(3, '艾希', '星神', '狙神')
萨科 = Hero(3, '萨科', '暗星', '刺客')
卡尔玛 = Hero(3, '卡尔玛', '暗星', '秘术师')
薇恩 = Hero(3, '薇恩', '源计划', '狙神')
兰博 = Hero(3, '兰博', '银河魔装机神', '爆破专家')
卡西奥佩娅 = Hero(3, '卡西奥佩娅', '战地机甲', '秘术师')
伊泽瑞尔 = Hero(3, '伊泽瑞尔', '未来战士', '强袭枪手')
杰斯 = Hero(3, '杰斯', '太空海盗', '重装战士')
辛德拉 = Hero(3, '辛德拉', '星之守护者', '法师')
蔚 = Hero(3, '蔚', '源计划', '斗士')
巴德 = Hero(3, '巴德', '宇航员', '秘术师')
妮蔻 = Hero(3, '妮蔻', '星之守护者', '圣盾使')
索拉卡 = Hero(4, '索拉卡', '星之守护者', '秘术师')
提莫 = Hero(4, '提莫', '宇航员', '狙神')
艾瑞莉娅 = Hero(4, '艾瑞莉娅', '源计划', '剑士')
孙悟空 = Hero(4, '孙悟空', '未来战士', '重装战士')
锐雯 = Hero(4, '锐雯', '未来战士', '剑士')
菲兹 = Hero(4, '菲兹', '银河魔装机神', '刺客')
维克托 = Hero(4, '维克托', '战地机甲', '法师')
纳尔 = Hero(4, '纳尔', '宇航员', '斗士')
烬 = Hero(4, '烬', '暗星', '狙神')
金克斯 = Hero(4, '金克斯', '奥德赛', '强袭枪手')
厄加特 = Hero(5, '厄加特', '战地机甲', '圣盾使')
迦娜 = Hero(5, '迦娜', '星之守护者', '大魔法使')
普朗克 = Hero(5, '普朗克', '太空海盗', '爆破专家')
泽拉斯 = Hero(5, '泽拉斯', '暗星', '法师')
璐璐 = Hero(5, '璐璐', '星神', '秘术师')
龙王 = Hero(5, '龙王', '奥德赛', '星舰龙神')
艾克 = Hero(5, '艾克', '源计划', '刺客')
锤石 = Hero(5, '锤石', '未来战士', '破法战士')
all_heroes = [
崔斯特,
凯特琳,
墨菲特,
魔腾,
嘉文四世,
波比,
蕾欧娜,
格雷福斯,
菲奥娜,
吉格斯,
佐伊,
俄洛伊,
霞,
安妮,
赵信,
布里茨,
莫德凯撒,
克格莫,
慎,
阿狸,
诺提勒斯,
德莱厄斯,
亚索,
卢锡安,
劫,
洛,
易,
艾希,
萨科,
卡尔玛,
薇恩,
兰博,
卡西奥佩娅,
伊泽瑞尔,
杰斯,
辛德拉,
蔚,
巴德,
妮蔻,
索拉卡,
提莫,
艾瑞莉娅,
锐雯,
孙悟空,
菲兹,
维克托,
纳尔,
烬,
金克斯,
厄加特,
迦娜,
普朗克,
泽拉斯,
璐璐,
龙王,
艾克,
锤石
]
def main(people, couple):
'''统计羁绊组合'''
星之守护者 = 0
银河魔装机神 = 0
星神 = 0
奥德赛 = 0
未来战士 = 0
太空海盗 = 0
源计划 = 0
暗星 = 0
战地机甲 = 0
宇航员 = 0
剑士 = 0
爆破专家 = 0
刺客 = 0
斗士 = 0
法师 = 0
圣盾使 = 0
狙神 = 0
秘术师 = 0
破法战士 = 0
强袭枪手 = 0
重装战士 = 0
couples = 0
names = []
for i in couple:
if people == 4:
if i.cost >= 4 or i.cost == 5:
return '', 0
if people == 5:
if i.cost == 5:
return '', 0
if people == 6:
if i.cost == 5:
return '', 0
names.append(i.name)
if i.origin == '星之守护者':
星之守护者 += 1
if i.origin == '银河魔装机神':
银河魔装机神 += 1
if i.origin == '星神':
星神 += 1
if i.origin == '奥德赛':
奥德赛 += 1
if i.origin == '未来战士':
未来战士 += 1
if i.origin == '太空海盗':
太空海盗 += 1
if i.origin == '源计划':
源计划 += 1
if i.origin == '暗星':
暗星 += 1
if i.origin == '战地机甲':
战地机甲 += 1
if i.origin == '宇航员':
宇航员 += 1
if i.class_ == '剑士':
剑士 += 1
if i.class_ == '爆破专家':
爆破专家 += 1
if i.class_ == '刺客':
刺客 += 1
if i.class_ == '斗士':
斗士 += 1
if i.class_ == '法师':
法师 += 1
if i.class_ == '圣盾使':
圣盾使 += 1
if i.class_ == '狙神':
狙神 += 1
if i.class_ == '秘术师':
秘术师 += 1
if i.class_ == '破法战士':
破法战士 += 1
if i.class_ == '强袭枪手':
强袭枪手 += 1
if i.class_ == '重装战士':
重装战士 += 1
#print(names)
num = 星之守护者 // 3
if num:
couples += num
num = 银河魔装机神 // 3
if num:
couples += num
num = 星神 // 2
if num:
couples += num
num = 奥德赛 // 3
if num:
couples += num
num = 未来战士 // 2
if num:
couples += num
num = 太空海盗 // 2
if num:
couples += num
num = 源计划 // 3
if num:
couples += num
num = 暗星 // 2
if num:
couples += num
num = 战地机甲 // 2
if num:
couples += num
num = 宇航员 // 3
if num:
couples += num
num = 剑士 // 3
if num:
couples += num
num = 爆破专家 // 2
if num:
couples += num
num = 刺客 // 2
if num:
couples += num
num = 斗士 // 2
if num:
couples += num
num = 法师 // 2
if num:
couples += num
num = 圣盾使 // 2
if num:
couples += num
num = 狙神 // 2
if num:
couples += num
num = 秘术师 // 2
if num:
couples += num
num = 破法战士 // 2
if num:
couples += num
num = 强袭枪手 // 2
if num:
couples += num
num = 重装战士 // 2
if num:
couples += num
return names, couples
# 人口等级
people = 9
all_couples = itertools.combinations(all_heroes, people)
def eight():
'''计算组合数量'''
def digui(n):
if n == 1:
return 1
return n * digui(n - 1)
Cnm = int(digui(len(all_heroes)) / (digui(len(all_heroes) - people) * digui(people)))
return Cnm
def save_and_run():
'''运行并写入文件'''
n = 0
with open(f'lol{people}.txt', 'a', encoding='utf-8') as f:
with tqdm(total=eight(), ncols=85) as pbar:
for x in all_couples:
pbar.update(1)
names, couple = main(people, x)
if couple >= n:
n = couple
f.write(f'{str(names)}:{couple}\n')
save_and_run()
print(f'用时{int((time()-start) // 60)}分{int((time()-start) % 60)}秒')