我想找出9个省道的所有可能的组合,总数是501,最后一个省道是双倍的。下面是关于9-Dart Finish的更多信息。在
我已经设置了以下程序来创建一个生成器来遍历每个迭代,以满足所有条件。According to Steve Crook,他花了4585142217282816次迭代来得到每个组合,这将花费很长的时间。我试着忽略第一个飞镖的1,但是我等了很长时间才跳过那些组合。在
我为调试添加了一个限制,只是想看看是否可以找到任何可能的组合。我找不到任何。。。一定有更有效的方法。在
#!/usr/bin/python
import itertools
import datetime
import time
DEBUG = False
sys_time_ms=lambda:int(round(time.time()*1000))
duration=lambda start,end:datetime.timedelta(milliseconds=(end-start))
str_matrix=lambda m:'\n'.join(','.join(str(c) for c in r) for r in m)
sgl = range(1,21) # single sections
dbl = map(lambda x:x*2,sgl) # double sections
tpl = map(lambda x:x*3,sgl) # triple sections
bul = [25,50] # center ring and bull's eye
all = sorted(list(itertools.chain(sgl,dbl,tpl,bul)))
iter_remain = 1000000000
darts = list(itertools.chain(list(itertools.repeat(all, 8)),[dbl]))
comboGen = itertools.product(*darts)
found_count = 0
start = sys_time_ms()
if DEBUG: print str_matrix(darts)
while True:
if iter_remain > 0:
try:
combo = next(comboGen)
if combo[0] > 1 and sum(combo) == 501:
found_count += 1
except StopIteration:
print 'Reached ITERATION_LIMIT'
break
else:
break
iter_remain -= 1
end = sys_time_ms()
print 'Combinations found: {} in ({})'\
.format(found_count, duration(start,end))
例如,上面的程序在10亿次迭代中花费了大约5.5分钟的时间,没有找到一个总和为501的组合。在
Combinations found: 0 in (0:05:35.439000)
darts
矩阵应该如下所示:
目前没有回答
相关问题 更多 >
编程相关推荐