तारीख से एक गणित समीकरण बनाओ


19

मेरे अर्थशास्त्र वर्ग में, मैं और मेरे दोस्त वैध गणितीय समीकरण बनाने के लिए तारीखों (एमएम / डीडी / वाईवाई) प्रारूप में अंकों को पुनर्व्यवस्थित करने के तरीकों के साथ आना पसंद करते हैं। अधिकांश भाग के लिए, हमें संयोजन के अलावा जोड़, घटाव, गुणा, भाग, कोष्ठक और घातांक का उपयोग करने की अनुमति है।

आपके कार्यक्रम को कुछ ऐसा ही करना चाहिए। कार्यक्रम को वर्तमान तिथि को आयात करना चाहिए और निम्नलिखित नियमों के अनुसार अभिव्यक्ति को प्रिंट करने के लिए ऑपरेटरों को सम्मिलित करना चाहिए।

  • अंकों का उपयोग क्रम में किया जाना चाहिए। अंकों की पुनर्व्यवस्था की अनुमति नहीं है।
  • परिणामी अभिव्यक्ति गणितीय रूप से सटीक होनी चाहिए।
  • जोड़, घटाव, गुणा, भाग, घातांक और कोष्ठक के उपयोग की अनुमति है। तो अंकों का संघटन है। हालांकि, सभी ऑपरेशन आवश्यक नहीं हैं। आप एक अंक नकारात्मक बनाने के लिए एक घटाव संकेत का उपयोग नहीं कर सकते (जैसे -1+1+11=1011 नवंबर, 2010 को)।
  • मानक मशीन पर कार्यक्रम 60 सेकंड में चलना चाहिए।

उदाहरण के लिए, यह चुनौती 10 नवंबर, 2015 को लिखी गई थी। यह कार्यक्रम 11/10/15 की व्याख्या करेगा। एक नमूना उत्पादन होगा (1+1)/10=1/5


बोनस

आप अपने प्रोग्राम के समर्थन में से प्रत्येक के लिए अपने कोड में बाइट्स की संख्या को 0.9 से गुणा कर सकते हैं।

  • यह कार्यक्रम उन सभी संभावित अभिव्यक्तियों को प्रिंट करता है, जिन्हें नए सिरे से अलग किया जा सकता है। यदि अतिरिक्त प्रतीकों के बढ़ते क्रम में सूचीबद्ध हैं, तो एक अतिरिक्त 0.95 से गुणा करें।
  • यह कार्यक्रम MM / DD / YYYY तिथियों के लिए भी काम करता है, संभावना के अलावा वर्ष के पहले दो अंकों के साथ एक संभावना को मुद्रित करता है। यदि यह बोनस पहले बोनस के साथ संयुक्त है, तो वर्ष के पहले दो अंकों के साथ सभी संभावनाएं मुद्रित होनी चाहिए।
  • कार्यक्रम भी जब वहाँ कई समानताओं रहे हैं के लिए एक समीकरण प्रिंट (उदाहरण के लिए, 11 नवंबर, 2011 को, 1=1=1=1=1=1इस तरह के रूप संभावनाओं के अलावा मुद्रित किया जाएगा, 1*1=1=1=1=1, 1*1*1=1=1=1, और 1*1*1*1=1=1। ऐसे सभी मामलों मुद्रित किया जाना चाहिए के लिए पहले बोनस प्राप्त किए जाते हैं।
  • कार्यक्रम 2 और 16 के बीच आधारों में रूपांतरण का समर्थन करता है। ध्यान दें कि यदि आधार 10 नहीं है, तो अभिव्यक्ति में सभी संख्याएं एक ही आधार में (Base b)लिखी जानी चाहिए , और अभिव्यक्ति के बाद ( bतदनुसार प्रतिस्थापित) लिखी जानी चाहिए ।

यह कोड गोल्फ है, इसलिए मानक नियम लागू होते हैं। बाइट्स में सबसे छोटा कोड जीतता है।


1
क्या संचालन की अनुमति है?
anoksquirrel

1
@FryAmTheEggman क्या इसे डुप्लिकेट कहने के लिए पर्याप्त समानता है? मुझे ऐसा नहीं लगा क्योंकि यह चुनौती विशेष रूप से एक अंक का उपयोग नहीं करती है और इसमें एक विशिष्ट आरएचएस को ध्यान में नहीं रखा जाता है (केवल समानता)।
आर्कटुरस

17
DD / MM / YYYY> MM / DD / YYYY
orlp

3
मुझे लगता है कि आप अपने प्रश्न में समीकरण का उपयोग करना चाहते हैं जहां आपने अभिव्यक्ति लिखी है (एक अभिव्यक्ति समीकरण का सिर्फ एक पक्ष है, और फिर आपका प्रश्न वास्तव में कोई मतलब नहीं है)।
पाओलो एबरमन

1
क्या किसी भी तारीख के लिए यह संभव है?
जैच गेट्स

जवाबों:


6

पायथन 3, 424 420 369 363 बाइट्स

import time as t
r=range
x=len
d=list(t.strftime('%m%d%y'))
o=([[x,x+'(',x+')']for x in ['']+"+ - == * / **".split()])
n=[]
for l in o:
    n=l+n
o=n
for p in r(x(o)**(x(d)-1)):
    e=''
    for i in r(x(d)-1):
        e+=str(d[i])+o[(p//(x(o)**i))%x(o)]
    e+=str(d[-1])
    try:
        if eval(e)and e.find('=')!=-1:
            print(e.replace('==','=').replace('**','^'))
            break
    except:pass

संख्याओं में संचालन के सभी संभावित संयोजनों को ब्रूट-फोर्स करता है और जब यह पता चलता है तो रुक जाता है।

संपादित करें: @NoOneIsHere के लिए 4 बाइट्स का धन्यवाद

संपादित करें 2: सहेजे गए 51 (!) @ValueInk के लिए धन्यवाद बाइट्स


1
नमस्कार, और PPCG में आपका स्वागत है! आप इनलाइन को इनलाइन कर सकते हैं except:passऔर स्पेस हटा सकते हैं [ (p//(len(o)**i))%len(o)]
NoOneIsHere

यदि आप विभाजन से आयात कर रहे हैं __future__, तो आपकी स्थिति के लिए पायथन 3 में काम करना बेहतर होगा? इसके अलावा, मुझे समझ में नहीं आता है कि oजब आप ऑपरेटरों की सूची के साथ निर्माण कर रहे हैं, तो आप रिवर्स क्यों करते हैं।
वैल्यू इंक

@ValueInk हाँ, मैं शायद इसे अजगर 3 में बदल सकता हूँ और काफी कुछ बाइट्स बचा सकता हूँ। जब मैंने चुनौती देना शुरू किया, तो मैंने इसे बिल्कुल भी गोल्फ पर केंद्रित नहीं किया, इसलिए इसे निश्चित रूप से छोटा किया जा सकता है। इसके अलावा, चूंकि प्रोग्राम सभी संयोजनों को मजबूर करता है, जब तक कि यह एक नहीं मिल जाता है, गति एक मुद्दा है, और मैंने पाया कि यदि आप ओ के रिवर्स का उपयोग करते हैं तो यह तेजी से काम करता है। मैं शायद इसे थोड़ा और नीचे ले जाऊंगा ताकि इसे एक गंभीर दावेदार बनाया जा सके।
थियो

o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])2 बाइट्स के लिए
जोनाथन एलन

1
@ जोनाथनअल्लन हह। इनको इंगित करने के लिए धन्यवाद। जब मैं समय (शायद कल) है बीमार कोड का एक पुनर्निमाण करना
थियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.