पायथन 2.7 - 380 378 372 371 367 363 357 354 352 348 336 चार्ट
बस एक सरल जानवर बल खोज।
from itertools import*
s=lambda x:[x]['1'>x>'0':]+['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
def E(e):
try:return eval(e.replace("^","**"))
except:0
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
print len(A)
for v in A:print v,A[v]
उदाहरण रन:
1
300
9
128 (2^(8-1))
289 ((9+8)^2)
216 (6^(1+2))
121 (11^2)
153 (3*51)
25 (5^2)
125 (5^(2+1))
126 (6*21)
127 ((2^7)-1)
स्पष्टीकरण:
s(x)
एक ऐसा कार्य है जो अंकों के अनुक्रम से युक्त एक स्ट्रिंग लेता है और उस क्रम में उन अंकों का उपयोग करके सभी अभिव्यक्तियों को वापस करता है।
[x]['1'>x>'0':]
यदि x '0' है या '0' से शुरू नहीं होने वाले अंकों का अनुक्रम है तो x युक्त सूची का मूल्यांकन करता है; अन्यथा, यह एक खाली सूची का मूल्यांकन करता है। मूल रूप से यह उस मामले को संभालता है जहां मैं सभी अंकों को एक साथ जोड़ता हूं।
['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
मूल रूप से विभाजन दो भागों में होता है (दोनों गैर-शून्य लंबाई के होते हैं), प्रत्येक भाग पर एस () कहते हैं और उत्पाद () का उपयोग करके, उनके बीच कुछ ऑपरेटर के साथ सभी परिणामों को जोड़ते हैं।
E(e)
मूल रूप से एक सुरक्षित निष्कासन है। यह ई का मान लौटाता है यदि ई वैध है और कोई नहीं।
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
मूल रूप से यह कोड सीमा में सभी संख्याओं की कोशिश करता है, उनके अंकों की अनुमति देता है और प्रत्येक अभिव्यक्ति की जांच करता है () उस क्रमचय के लिए उत्पन्न होता है, अगर x '0' से शुरू नहीं होता है, तो पहली अभिव्यक्ति को अनदेखा करता है, क्योंकि यदि x 'से शुरू नहीं होता है' 0 'तो पहला एक्सप्रेशन सिर्फ x होगा।
वैकल्पिक संस्करण - 397 वर्ण
यदि आपको अंशों का उपयोग करना आवश्यक है तो यहां मेरा कोड है:
from fractions import*
from itertools import*
s=lambda x:["Fraction(%s)"%x]['1'>x>'0':]+['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
def E(e):
try:return eval(e.replace("^","**"))
except:0
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
print len(A)
for v in A:print v,A[v].replace("Fraction","")
/काम करता है? उदाहरण के लिए, क्या है1/3?