आपको संख्याओं की सूची L = [17, 5, 9, 17, 59, 14], ऑपरेटरों का एक बैग O = {+:7, -:3, *:5, /:1}और एक नंबर दिया जाता है N = 569।
कार्य
एक समीकरण को आउटपुट करें जो Lबाईं ओर के सभी नंबरों का उपयोग करता है और केवल दायीं ओर की संख्या का उपयोग करता है N। यदि यह संभव नहीं है, उत्पादन गलत। उदाहरण समाधान:
59*(17-5)-9*17+14 = 569
सीमाएं और स्पष्टता
- आप संख्या को समाप्त नहीं कर सकते हैं (
[13,37]इसका उपयोग नहीं किया जा सकता है1337) - केवल प्राकृतिक संख्याएँ और शून्य दिखाई देंगे
L। - आदेश में
Lकोई फर्क नहीं पड़ता। - आपको सभी नंबरों का उपयोग करना चाहिए
L। - केवल ऑपरेटरों
+,-,*,/में दिखाई देगाO। Oआपकी आवश्यकता से अधिक ऑपरेटर हो सकते हैं, लेकिन कम से कम|L|-1ऑपरेटर- आप प्रत्येक ऑपरेटर को किसी भी संख्या में मान तक ले सकते हैं
O। - सभी चार ऑपरेशन
Oमानक गणितीय संचालन हैं; विशेष रूप से,/सटीक भिन्न के साथ सामान्य विभाजन है।
अंक
- कम अंक, बेहतर
- आपके कोड का प्रत्येक वर्ण आपको एक बिंदु देता है
आपको एक गैर-गोल्फ संस्करण प्रदान करना होगा जो पढ़ने में आसान है।
पृष्ठभूमि
स्टैक ओवरफ्लो पर एक समान प्रश्न पूछा गया था। मैंने सोचा कि यह एक दिलचस्प कोड-गोल्फ चुनौती हो सकती है।
अभिकलनात्मक जटिलता
जैसा कि पीटर टेलर ने टिप्पणियों में कहा, आप इसके साथ सबसेट राशि हल कर सकते हैं :
- आपके पास सब्मिट राशि का एक उदाहरण है (इसलिए पूर्णांक का एक सेट और संख्या x)
- L: = S + [0, ..., 0] (| S | एक शून्य बार), N: = x, O: {{+:: S--1, *: | S | - 1, /: 0, -: 0}
- अब मेरी समस्या के इस उदाहरण को हल करें
- सबसेट के लिए समाधान S की संख्या है जो शून्य से गुणा नहीं होता है।
यदि आपको एक एल्गोरिथ्म मिलता है जो O (2 ^ n) से बेहतर है, तो आप साबित करते हैं कि P = NP। जैसा कि पी बनाम एनपी एक मिलेनियम पुरस्कार समस्या है और इसलिए 1,000,000 यूएस-डॉलर की कीमत है, यह बहुत संभावना नहीं है कि कोई व्यक्ति इसके लिए एक समाधान ढूंढता है। इसलिए मैंने रैंकिंग के इस हिस्से को हटा दिया।
परीक्षण के मामलों
निम्नलिखित केवल मान्य उत्तर नहीं हैं, अन्य समाधान मौजूद हैं, और अनुमति दी गई है:
- (
[17,5,9,17,59,14],{+:7, -:3, *:5, /:1},569)
=>59 * (17-5)- 9 * 17 + 14 = 569 - (
[2,2],{'+':3, '-':3, '*':3, '/':3},1)
=>2/2 = 1 - (
[2,3,5,7,10,0,0,0,0,0,0,0],{'+':20, '-':20, '*':20, '/':20},16)
=>5+10-2*3+7+0+0+0+0+0+0+0 = 16 - (
[2,3,5,7,10,0,0,0,0,0,0,0],{'+':20, '-':20, '*':20, '/':20},15)
=>5+10+0*(2+3+7)+0+0+0+0+0+0 = 15
/ar div), बस फ़्लोटिंग-पॉइंट और आशा-के लिए-नो-राउंडिंग-त्रुटियाँ, ...?
5+10+2*3+7*0+0...
m = |L|? यदि हाँ, तो आप उस सूची के आकार पर निर्भर नहीं होने के लिए रनटाइम की अपेक्षा कैसे कर सकते हैं? उदाहरण के लिए,[2,2],[+,+,...,+,/],1। वास्तव में, चूंकि n O (m) है, आप इसे केवल m के संदर्भ में लिख सकते हैं।