एक संख्या व्यक्त करें
60 के दशक में वापस, फ्रांसीसी ने टीवी गेम शो "डेस शिफ्रेस एट डेस लेट्रेस" (अंक और पत्र) का आविष्कार किया। शो के डिजिट्स-भाग का लक्ष्य कुछ 3-यादृच्छिक लक्ष्य संख्याओं का उपयोग करके, एक निश्चित 3-अंकों के लक्ष्य संख्या के जितना करीब हो सकता था। प्रतियोगी निम्नलिखित ऑपरेटरों का उपयोग कर सकते हैं:
- संघटन (१ और २ १२ है)
- जोड़ (1 + 2 3 है)
- घटाव (5 - 3 = 2)
- विभाजन (8/2 = 4); यदि परिणाम एक प्राकृतिक संख्या है, तो विभाजन की अनुमति है
- गुणा (2 * 3 = 6)
- कोष्ठक, संचालन की नियमित पूर्वता को ओवरराइड करने के लिए: 2 * (3 + 4) = 14
प्रत्येक दिए गए नंबर का उपयोग केवल एक बार किया जा सकता है या बिल्कुल नहीं।
उदाहरण के लिए, लक्ष्य संख्या 728 को संख्याओं के साथ बिल्कुल मिलान किया जा सकता है: 6, 10, 25, 75, 5 और 50 निम्नलिखित अभिव्यक्ति के साथ:
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
इस कोड चुनौती में, आपको एक निश्चित लक्ष्य संख्या के जितना संभव हो सके एक अभिव्यक्ति खोजने का काम दिया जाता है। चूंकि हम 21 वीं सदी में रह रहे हैं, इसलिए हम 60 के दशक की तुलना में बड़े लक्ष्य संख्या और अधिक संख्या में काम करेंगे।
नियम
- अनुमत संचालक: संघ, +, -, /, *, (())
- संघ संचालक के पास कोई प्रतीक नहीं है। बस संख्या को सम्मिलित करें।
- कोई "उलटा संघटन" नहीं है। 69 69 है और एक 6 और एक 9 में विभाजित नहीं किया जा सकता है।
- लक्ष्य संख्या एक सकारात्मक पूर्णांक है और इसमें अधिकतम 18 अंक हैं।
- काम करने के लिए कम से कम दो नंबर हैं और अधिकतम 99 नंबर हैं। ये अंक भी अधिकतम 18 अंकों के साथ सकारात्मक पूर्णांक हैं।
- यह संभव है (वास्तव में संभवतः) कि संख्या और ऑपरेटरों के संदर्भ में लक्ष्य संख्या को व्यक्त नहीं किया जा सकता है। जितना संभव हो उतना करीब पाने का लक्ष्य है।
- कार्यक्रम एक उचित समय (एक आधुनिक डेस्कटॉप पीसी पर कुछ मिनट) में समाप्त होना चाहिए।
- मानक खामियां लागू होती हैं।
- इस पहेली के "स्कोरिंग" खंड में सेट किए गए परीक्षण के लिए आपके कार्यक्रम को अनुकूलित नहीं किया जा सकता है। यदि मुझे इस नियम का उल्लंघन करने पर संदेह है, तो मैं परीक्षण सेट को बदलने का अधिकार सुरक्षित रखता हूं।
- यह कोई कोडगुल्फ नहीं है।
इनपुट
इनपुट में संख्याओं की एक सरणी होती है जिसे किसी भी सुविधाजनक तरीके से स्वरूपित किया जा सकता है। पहला नंबर लक्ष्य संख्या है। बाकी संख्याएँ वे संख्याएँ हैं जिन्हें आपको लक्ष्य संख्या बनाने के लिए काम करना चाहिए।
उत्पादन
आउटपुट के लिए आवश्यकताएं हैं:
- यह एक स्ट्रिंग होनी चाहिए जिसमें शामिल हैं:
- इनपुट संख्याओं का कोई सबसेट (लक्ष्य संख्या को छोड़कर)
- ऑपरेटरों की संख्या
- मैं रिक्त स्थान के बिना सिंगल लाइन होने के लिए आउटपुट पसंद करता हूं, लेकिन यदि आप फिट होते हैं, तो आप रिक्त स्थान और नए लिंक जोड़ सकते हैं। नियंत्रण कार्यक्रम में उनकी अनदेखी की जाएगी।
- आउटपुट एक मान्य गणितीय अभिव्यक्ति होना चाहिए।
उदाहरण
पठनीयता के लिए, इन सभी उदाहरणों का एक सटीक समाधान है और प्रत्येक इनपुट नंबर का एक बार उपयोग किया जाता है।
इनपुट: 1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
आउटपुट:111*111*(111+11+1)
इनपुट: 153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
आउटपुट:123*(456+789)
इनपुट: 8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
आउटपुट:9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
इनपुट: 207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
आउटपुट:1+2*(3+4)*(5+6)*(7+8)*90
इनपुट: 34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
आउटपुट: 1+2*(3+4*(5+6*(7+8*90)))
लेकिन मान्य आउटपुट भी है:34957-6-8
स्कोरिंग
किसी प्रोग्राम का पेनल्टी स्कोर नीचे दिए गए टेस्टसेट के लिए भावों की सापेक्ष त्रुटियों का योग है।
उदाहरण के लिए यदि लक्ष्य मान 125 है और आपकी अभिव्यक्ति 120 देती है, तो आपका जुर्माना स्कोर अनुपस्थित है (1 - 120/125) = 0,04।
सबसे कम के साथ कार्यक्रम स्कोर (सबसे कम कुल रिश्तेदार त्रुटि) जीतता है। यदि दो कार्यक्रम समान रूप से समाप्त होते हैं, तो पहला सबमिशन जीत जाता है।
अंत में, अंडकोष (8 मामले):
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
पिछली ऐसी ही पहेलियाँ
इस पहेली को बनाने और सैंडबॉक्स पर पोस्ट करने के बाद, मैंने दो समान पहेलियों में कुछ समान (लेकिन समान नहीं!) देखा: यहाँ (कोई समाधान नहीं) और यहाँ । यह पहेली कुछ अलग है, क्योंकि यह संघचालक ऑपरेटर का परिचय देती है, मुझे तलाश नहीं है और सटीक मिलान नहीं है और मुझे बिना किसी क्रूरता के समाधान के करीब आने के लिए रणनीति देखना पसंद है। मुझे लगता है कि यह चुनौतीपूर्ण है।