सिर्फ एक चौके की पहेली नहीं


11

फोर फोर्स पज़ल के इस संस्करण में आपके x x'sनंबर (और कोई अन्य नंबर) और 0 से 100 तक हर नंबर तक पहुंचने के लिए संचालन का एक निर्धारित सेट होना चाहिए। यदि x = 4आप चार तक का उपयोग कर सकते हैं 4sऔर यह सवाल क्लासिक चार चौकों का उपयोग करता है पहेली (सिवाय इसके कि आप उनमें से चार का उपयोग करने के बजाय चार 4s तक उपयोग कर सकते हैं)। हम मान लेते हैं 1 < x <= 9

इस संस्करण में, केवल निम्नलिखित ऑपरेटरों को अनुमति दी जाती है:

  • जोड़ ( +), घटाव ( -), गुणा ( *), मंडल ( /)। ध्यान दें कि यह वास्तविक विभाजन है, ताकि 5/2 = 2.5
  • एक्सपेंसेशन (उदाहरण 4 ^ 4) क्योंकि इसमें सामान्य रूप से हाथ से लिखे जाने पर कोई अतिरिक्त प्रतीक नहीं होगा।
  • आप नया पूर्णांक बना सकते हैं xs। जैसे आप पूर्णांक बना सकते हैं 4, 44, 444, 4444

आप केवल संचालकों के मूल्यांकन के क्रम को नियंत्रित करने के लिए कोष्ठकों का उपयोग समूह संख्याओं में भी कर सकते हैं। उदाहरण के लिए आप कोष्ठक के साथ कोष्ठक को जोड़ नहीं सकते (4/4)(4/4) = (1)(1) = 11

कोई अन्य प्रतीकों का उपयोग नहीं किया जा सकता है और संचालन के मानक आदेश लागू होते हैं।

आपका प्रोग्राम xनिर्धारित सीमा में और nबीच में 0और 100समावेशी होने पर, उस इनपुट के लिए एक सही समाधान, यदि यह मौजूद है , तो उत्पन्न होना चाहिए । अन्यथा आपके कोड को कुछ ऐसा उत्पादन करना चाहिए जिससे यह पता चल सके कि ऐसा कोई समाधान मौजूद नहीं है।

आपको अपनी मशीन पर पूरा करने के लिए xऔर nअनुमत सीमा में अपने इनपुट को पूरा करने में सक्षम होना चाहिए । यह कोड गोल्फ है, इसलिए सबसे छोटा समाधान जीतता है।

यह पुराना संबंधित प्रश्न अधिक ऑपरेटर्स (और केवल 4s) का उपयोग करता है और इसलिए 0 से 100 तक की सभी संख्याएँ हल हैं जो इस चुनौती के लिए सही नहीं होंगी।

इनपुट और आउटपुट

आपका कोड दो पूर्णांकों xऔर nइनपुट के रूप में लेता है और किसी भी मानव पठनीय प्रारूप में एक समाधान (या एक संकेत है कि कोई समाधान नहीं है) को सुविधाजनक बनाना चाहिए। इनपुट 4 6का मतलब होगा "उदाहरण के लिए, 4 एसपीएस का उपयोग करना, संख्या 6 बनाएं"। तो अगर इनपुट 4 6आउटपुट है (4+4)/4+4



2
क्या परिवेदनों को संघनन के साथ जोड़ा जा सकता है? उदा `(4/4) (4/4) = (1) (1) = 11?
डिजिटल ट्रामा

1
कोष्ठक जोड़ना (और कोष्ठक + अव्यवस्था को रोकना) इसे काफी कठिन बना देता है
ड्रैकॉनिस

2
समय की संख्या पर एक्सप्रेशन
पीटर टेलर

2
@PeterTaylor कोष्ठकों में काफी अंतर प्रतीत होता है। अगर मैं कर सकता हूं तो मैं फिर से मतदान करूंगा।
फेलिपा

जवाबों:


4

पायथन 3 , 265 बाइट्स

def f(x,n):
 for e in g(x,x-(x>7)):
  try:
   if eval(e)==n:return e
  except:1
g=lambda x,d:{str(x)*-~i for i in range(d)}|{s%(a,b)for a in g(x,d-1)for b in g(x,d-a.count(str(x)))for s in'%s**%s (%s/%s) (%s+%s) (%s-%s) %s*%s %s/%s'.split()['**'in a+b:]}if d else{}

इसे ऑनलाइन आज़माएं!

इंजीनियर टोस्ट द्वारा जुड़े संदर्भ में सभी नंबरों के लिए काम करता है ।

x=8टियो पर चलाता है , x=9मेरी मशीन पर कुछ मिनट लगते हैं।


फ़ंक्शन gसभी संयोजनों का एक सेट देता है, जिसमें अधिकांश xसंख्याएँ होती हैं xfफिर उनके माध्यम से लूप करता है और पहले का मूल्यांकन करता है जो संख्या का मूल्यांकन करता है n

प्रत्येक के लिए मुझे मिलने वाले संभावित मान xनिम्न हैं:

x  possible numbers
------
2  5
3  17
4  35
5  56
6  83
7  101
8  101
9  101

सभी नंबरों को ऊपर से उत्पन्न किया जा सकता (a+b), (a-b), (a+b), a*b, a/b, (a/b), और a^ba+bऔर a-bअधिक संख्या न दें।

a^b यह भी केवल एक बार उपयोग किया जाता है, क्योंकि अन्यथा बड़ी संख्या बनती है (यह ऊपर संदर्भ दस्तावेज़ में भी सत्यापित है)


एक वैकल्पिक संस्करण जो शॉर्ट-सर्किट जैसे ही एक समाधान पाता है (गोल्फ के रूप में नहीं):

यह बहुत तेज़ है क्योंकि x=7..9सभी संख्याएँ बनाई जा सकती हैं।

पायथन 3 , 338 289 बाइट्स

def f(x,n,d=-1):
 d=[d,x][d<0];X=str(x);r=set()
 for E in{X*-~i for i in range(d)}|{s%(a,b)for a in[0]*d and f(x,n,d-1)for b in f(x,n,d-a.count(X))for s in'%s**%s (%s/%s) (%s+%s) (%s-%s) %s*%s %s/%s'.split()['**'in a+b:]}:
  try:e=eval(E)
  except:e=-1
  if e==n:exit(E)
  r|={E}
 return r

इसे ऑनलाइन आज़माएं!


यह बहुत अच्छा जवाब है! मैंने सोचा था कि आप हमेशा एक्स एक्सएस (जैसे के (4/4**(4-4))लिए 4) के विपरीत बिल्कुल उपयोग कर रहे थे, लेकिन यह पता चला है कि ऐसा नहीं है।
अनुष

exit(e)से कम हैreturn e
mbomb007
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.