码迷,mamicode.com
首页 > 编程语言 > 详细

python实现24点游戏(地球上最短的24点游戏代码?)

时间:2020-07-04 13:40:35      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:pass   result   form   end   24点游戏   函数   div   个数   abs   

牛bi要挑大的吹,否则看帖的人没几个。

所谓24点游戏,就是4个数字和算符的排列组合:

四个里挑两个P(4,2)

计算:四个算符

四个里剩余两个+计算结果,三个里挑两个P(3,2)

计算:四个算符

经过上一轮3个里剩余1个+计算结果,两个里挑两个(排列)

计算:四个算符

所以,全部可能性:P(4,2)*4*P(3,2)*4*P(2,2)*4=9126(只可能有重复,不会有逃脱)

实现:

*首先需要N个里取几个的排列函数

*其次就是得到24点公式的函数

*初始化(4个取2个,3个取2个,2个取2个),以及算符函数

*最后是所谓的难局调用

def permutation(n,c,com=0,limit=0,per=[]):
    for pos in range(limit,n):
        t = per + [pos]
        if len(set(t)) == len(t):
            if len(t) == c:
                    yield [pos,]
            else:
                    for result in permutation(n,c,com,com*pos, per + [pos,]):
                            yield [pos,] + result

def get_formula(floor,p):
    for res0 in res[floor]:
        for o0 in operator:
            formula = (%s%s%s) % (p[res0[0]],o0,p[res0[1]])
            if floor == 2:
                try:
                    if abs(eval(formula)-24)<0.1: return formula
                except:
                    pass
            else:
                p1 = [p[x] for x in range(4-floor) if not(x in res0)]
                p1.append(formula)
                f = get_formula(floor+1,p1)
                if not (f == None):
                    return f
    return None

res = [[r for r in permutation(4,2)],[r for r in permutation(3,2)],[r for r in permutation(2,2)]]
operator = [+,-,*,/]

f = get_formula(0,[3,3,7,7])
print(f)
f = get_formula(0,[5,5,5,1])
print(f)

结果(もちろん算无遗策):

(7*(3+(3/7)))
(5*(5-(1/5)))

 

python实现24点游戏(地球上最短的24点游戏代码?)

标签:pass   result   form   end   24点游戏   函数   div   个数   abs   

原文地址:https://www.cnblogs.com/nocomment/p/13234480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!