दो-शून्य-एक-पाँच पहेली


13

पृष्ठभूमि

यह पहेली चार चौकों की पहेली (अपने आप में एक पिछले प्रश्न का विषय ) पर भिन्नता है । उस पहेली की तरह, उद्देश्य केवल चार अंकों और कुछ गणितीय ऑपरेटरों का उपयोग करते हुए, विभिन्न पूर्ण संख्याओं के लिए गणितीय अभिव्यक्तियों को खोजना है। इस मामले में, हालांकि, अनुमत अंक सिर्फ 2, 0, 1 और 5 हैं । प्रत्येक को एक बार समाधान में और सही क्रम में दिखाई देना चाहिए। आश्चर्यजनक रूप से कई संपूर्ण संख्याओं को इस तरह से दर्शाया जा सकता है। सॉल्वर को पहले हाथ से हल करने की कोशिश करने के लिए प्रोत्साहित किया जाता है, क्योंकि यह अजीब तरह से सुखद है।

नियम

निरंतर या एकल अंकों से निर्माण किया जा सकता है:

निम्नलिखित एकरी संचालन की अनुमति है:

  • एकतरफा नकार: -x
  • वर्गमूल: sqrt (x)
  • पूर्णांक:

निम्नलिखित बाइनरी संचालन की अनुमति है:

  • मानक अंकगणितीय ऑपरेटर: x + y, xy, x * y और x / y
  • मनमाना घातांक: x ^ y
  • मनमानी जड़ें: आरटी [x] (y) (= y का मूल x)

कार्य

आपके प्रोग्राम को 0 और 100 के बीच के पूर्णांकों के रूप में अभिव्यक्तियों को प्रिंट करना चाहिए, और फिर इसे उत्पन्न करने वाले भावों की संख्या को आउटपुट करता है।

  • समाधानों को प्रारूप n = [expr] क्रम में मुद्रित किया जाना चाहिए।
  • इस क्रम में प्रत्येक अंक को 2, 0, 1, 5, सभी का उपयोग करना चाहिए।
  • ऊपर वर्णित संकेतन का उपयोग करके भावों को मुद्रित किया जाना चाहिए। व्हाट्सएप के रूप में अनावश्यक कोष्ठकों की अनुमति है लेकिन आवश्यक नहीं है। ऑपरेटर की पूर्ववर्ती स्थिति का क्रम एकात्मक नकार, तथ्यपूर्ण, घातांक, गुणा / भाग और जोड़ / घटाव है।
  • कार्यक्रम को सभी नंबरों के लिए समाधान वापस करने की आवश्यकता नहीं है। एक प्रोग्राम जो केवल 0 आउटपुट करता है इसलिए मान्य है; हालाँकि, स्कोरिंग सेक्शन नीचे देखें।
  • कार्यक्रम को एक आधुनिक कंप्यूटर पर 15 मिनट के भीतर चलना चाहिए।

आप एक कार्यक्रम या फ़ंक्शन लिख सकते हैं। अभिव्यक्तियों को STDOUT (या निकटतम विकल्प) में मुद्रित किया जाना चाहिए। अभिव्यक्तियों की संख्या को STDOUT में मुद्रित किया जा सकता है या पूर्णांक के रूप में लौटाया जा सकता है। मानक कोड गोल्फ प्रतिबंध लागू होते हैं।

उदाहरण आउटपुट

0=2*0*1*5
10=20*1*.5
42=((2+0!)!+1)!/5!
100=20*1*5
4

स्कोरिंग

अद्यतन : @orlp ने स्कोरिंग सिस्टम में एक दोष नोट किया है। Http://meta.codegolf.stackexchange.com/questions/5106/way-of-salvaging-two-zero-one-five-puzzle-challenge देखें कि यह कैसे तय किया जाना चाहिए या नहीं।

समाधानों को सबसे पहले उनके द्वारा बनाए गए भावों की संख्या और फिर बाइट्स में उनकी कोड लंबाई द्वारा बनाया जाता है। इसलिए, एक 1000 बाइट प्रोग्राम जो 80 परिणाम उत्पन्न करता है, एक 100 बाइट प्रोग्राम को हरा देगा जो केवल 79 का उत्पादन करता है (हालांकि बाद वाले को लापता परिणामों को शामिल करने के लिए आसानी से बढ़ाया जा सकता है)।

उन लोगों के लिए जो एक प्रेरक लक्ष्य चाहते हैं, नीचे उन अभिव्यक्तियों की संख्या पर एक कम बाउंड है जिन्हें प्रतिनिधित्व किया जा सकता है। मैं एक प्रविष्टि जमा करने की योजना नहीं बनाता, इसलिए कम से जीतना अच्छी तरह से संभव हो सकता है!

कम से कम 85 (101 में से), हालांकि यह अधिक हो सकता है।

स्कोरबोर्ड

अतिरिक्त प्रोत्साहन के रूप में, यहाँ स्कोर प्रगति का सारांश है। जब भी आप उच्चतम स्कोर को हराते हैं, तो अपने आप को तालिका के शीर्ष पर जोड़ने के लिए स्वतंत्र महसूस करें (या किसी और से पूछें)।

  • 0 भाव, 1 बाइट (पायथ): कार्यान्वयन जो केवल 0 आउटपुट करता है

क्या .20 एक स्थिर है?
ल्यूक

1
@ ल्यूक: हाँ, हालांकि इसे (.2 + 0) के रूप में भी दर्शाया जा सकता है, इसलिए यह स्पष्टता नहीं बढ़ाता है
उरी ग्रांट

1
@orlp ध्यान दें कि शून्य से अधिक के प्रमुख शून्य और अंश किसी भी अभिव्यंजक को जोड़ते नहीं हैं: जैसे 015 = 0 + 15 और 1.5 = 1 + .5।
उड़ी ग्रांट

1
@ mbomb007 यह बहुत जटिल है। यहाँ एक त्वरित स्पष्टीकरण मैंने लिखा है: gist.github.com/orlp/e92b3b7d26ad9b11378e
orlp

2
@UriZarfaty फिर 99 अलग-अलग उपयोगी स्थिरांक हैं: gist.github.com/orlp/eb997e49e41878c76d0a
orlp

जवाबों:


9

85, ~ 2400 बाइट्स

मैं थोड़ा दुखी हूं यह एक कोड गोल्फ चुनौती है, क्योंकि मुझे लगता है कि मेरे पिछले सभी प्रयास अब बेकार हो गए हैं कि मैं इसे पोस्ट करूंगा:

  0 = ((2*0)^15)
  1 = ((2^0)^15)
  2 = (2-(0^15))
  3 = (20*.15)
  4 = (20*(1/5))
  5 = (20-15)
  6 = ((.20+1)*5)
  7 = ((20*.1)+5)
  8 = (2*((0-1)+5))
  9 = ((.20/.1~)*5)
 10 = (20/(1/.5))
 11 = ((((2-0)+1))!+5)
 12 = (20*(.1+.5))
 13 = ((-(2)-0)+15)
 14 = (20-(1+5))
 15 = ((2*0)+15)
 16 = ((2^0)+15)
 17 = ((2-0)+15)
 18 = (20-(1/.5))
 19 = (20-(1^5))
 20 = (20^(1^5))
 21 = (20+(1^5))
 22 = (20+(1/.5))
 23 = (((2-0)/.1~)+5)
 24 = ((20-1)+5)
 25 = ((20^1)+5)
 26 = ((20+1)+5)
 27 = (rt[.2](((0)!+1))-5)
 28 = (2*(-((0)!)+15))
 29 = ((((2+(0)!)+1))!+5)
 30 = ((2-0)*15)
 31 = (20+sqrt((1+(5)!)))
 32 = ((20*.1)^5)
 33 = ((.2^-((0)!))/.15~~)
 34 = (2+(((0)!+1)^5))
 35 = (20+15)
 36 = (20*(1/.5~))
 37 = (rt[.2](((0)!+1))+5)
 38 = ((20-1)/.5)
 39 = (-((2^0))+(sqrt(.1~)*(5)!))
 40 = (20*(1/.5))
 41 = (((.2~^-((0)!))/.1~)+.5)
 42 = ((20+1)/.5)
 43 = (-(2)+(((0)!/.1~)*5))
 44 = (20+((-(1)+5))!)
 45 = (20/(1-.5~))
 46 = ((.2+((0)!/.1~))*5)
 47 = (2+(((0)!/.1~)*5))
 48 = (2*(((0-1)+5))!)
 49 = ((((2+(0)!))!/.1~)-5)
 50 = (((2^0)/.1)*5)
 51 = ((.2+((0)!/.1))*5)
 52 = (2+(((0)!/.1)*5))
 54 = (((2+(0)!)/.1)/.5~)
 55 = ((2+((0)!/.1~))*5)
 56 = (((.2-(0)!)+sqrt(.1~))*-((5)!))
 58 = (-(2)+sqrt((((((0)!/sqrt(.1~)))!)!*5)))
 59 = ((((2+(0)!))!/.1~)+5)
 60 = (20/(.1~^.5))
 62 = (2*(-((0)!)+sqrt(rt[-(.1)](.5))))
 64 = ((2-0)^(1+5))
 65 = ((20/sqrt(.1~))+5)
 66 = ((-(((2+(0)!))!)/.1~)+(5)!)
 67 = (((((2+(0)!))!)!*.1)-5)
 69 = ((2^(((0)!/sqrt(.1~)))!)+5)
 70 = (((.2^-((0)!))/-(.1))+(5)!)
 72 = ((2+(0)!)*((-(1)+5))!)
 75 = ((.2^-((0)!))*15)
 76 = (rt[(-(2)^-((0)!))](.1~)-5)
 77 = (((((2+(0)!))!)!*.1)+5)
 78 = (2*(-((0)!)+(sqrt(.1~)*(5)!)))
 80 = (-(20)*(1-5))
 81 = (201-(5)!)
 82 = (2*((0)!+(sqrt(.1~)*(5)!)))
 84 = (((.2-(0)!)+.1)*-((5)!))
 85 = (((((2+(0)!))!)!*.1~)+5)
 86 = (rt[(-(2)^-((0)!))](.1~)+5)
 88 = (rt[.2]((-((0)!)-1))+(5)!)
 90 = ((20/.1~)*.5)
 93 = (((2+(0)!)/-(.1~))+(5)!)
 95 = ((20-1)*5)
 96 = ((.20-1)*-((5)!))
 98 = (-(20)*(.1-5))
 99 = ((-(20)-1)+(5)!)
100 = (20/(1/5))
85

यहाँ से यह सिर्फ एक संपीड़न चुनौती है। शायद मैं बाद में प्रतिस्पर्धा करूँगा, शायद मैं नहीं करूँगा। मेरे लिए सबसे मज़ेदार फ़ार्मुलों को खोजने की चुनौती थी।

एक सॉल्वर लिखने के लिए संघर्ष करने वालों के लिए एक संकेत - रनटाइम एक समस्या नहीं होनी चाहिए। यदि आपके पास जांच के लिए बहुत सारे सूत्र हैं, तो आपको निराशाजनक समाधान और डुप्लिकेट को फेंकने के लिए बेहतर उत्तराधिकार की आवश्यकता है। कोड मैंने पायथन पर ~ 5 सेकंड में उपरोक्त रन बनाने के लिए लिखा था।


rt [.1] (- (५।) ०.०.५ की ०.१ वीं जड़ है, ०.१ की ०.५ वीं जड़ नहीं।
उड़ी ग्रांट

इसके अलावा, मुझे संदेह है कि विजेता अच्छी तरह से एक संपीड़ित पाठ आउटपुट हो सकता है। इससे बचने का एक बेहतर तरीका सोचा जाना चाहिए :-(
ग्रांटी

@UriZarfaty ओह, मैं इसे अपने कोड में ठीक करूंगा और फिर से चलाऊंगा, मुझे एक सेकंड दो।
orlp

मैं काफी overestimated कितना बड़ा उत्पादन कार्यक्रम के आकार की तुलना में किया जाएगा। पात्रों और अति सुंदर कोष्ठकों की छोटी श्रृंखला को देखते हुए, मुझे लगता है कि समाधान वास्तव में बहुत अच्छी तरह से संपीड़ित होगा।
उड़ी ग्रांट

1
@ mbomb007 मैंने इसे साफ करने के लिए कोई प्रयास नहीं किया, और मुझे लगता है कि वर्तमान स्थिति में कोड टूट गया है - कुछ चीजों को असहज करने का प्रयास करें: gist.github.com/orlp/878da16b5b7b650ebd09
orlp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.