作者weijr (Beware of the Monkey)
看板puzzle
标题Re: [闲聊] 益智小游戏
时间Tue Jun 14 17:56:20 2005
※ 引述《paygo (新气象[照])》之铭言:
: 请问一下 1 5 8 13
: 这个的解是(8 - 1)x[13/5] 吗
: 如果不是的话,那答案应该是什麽呀,如果可以的话请寄到我信箱好吗?
: 谢谢唷,好想知道答案...>_<
用下面这个 python 程式配上计算分数的 module mxNumber 可以算出答案,
(不过其实自己排一排都可以排出来的)
from mx.Number import *
b,sol,r=[Rational(x) for x in [1,5,8,13]],21,range(7)
def div(x,y):
if y==0: return -10000
return x/y
op={lambda x,y:x+y:"+", lambda x,y:x-y:"-", lambda x,y:x*y:"*", div:"/"}
s7=reduce(lambda s,i:[l+[j] for l in s for j in r if j not in l],r,[[]])
chk=lambda s:min([n-2*len([i for i in s[:n+1] if i>3]) for n in r])>=0
def evaluate(s):
s1,s2=[],[]
for i in s:
if type(i)==type(div):
s1.append(i(s1.pop(),s1.pop()))
s2.append("(%s%s%s)"%(s2.pop(),op[i],s2.pop()))
else:
s1.append(i)
s2.append("%d"%i.numerator)
return s1[0],s2[0]
for o in [[i,j,k] for i in op for j in op for k in op]:
for p in filter(chk,s7):
rtn=evaluate([(b+o)[i] for i in p])
if rtn[0]==sol:
print rtn[1]+"=%d"%sol
--
http://weijr.b81.org/poker 赌圣的秘密情人 That's No Limit, Baby!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 69.235.17.139
※ 编辑: weijr 来自: 69.235.17.139 (06/14 18:25)