मेटा पृष्ठभूमि
यह Puzzling पर एक प्रश्न के रूप में सेट किया गया था , और त्वरित प्रतिक्रिया "ठीक है, कोई व्यक्ति बस कंप्यूटर द्वारा हल करेगा"। इस बारे में बहस चल रही थी कि इसे हल करने का कार्यक्रम कितना जटिल होगा। खैर, "यह कार्यक्रम कितना जटिल है" कोड-गोल्फ की परिभाषा बहुत सुंदर है , इसलिए शायद पीपीसीजी इस मुद्दे को सुलझा सकता है?
पृष्ठभूमि
एक matchstick समीकरण मूल रूप से एक सामान्य गणितीय समीकरण है, लेकिन जहां अंक और ऑपरेटरों एक मेज पर माचिस की तीलियों रखकर शारीरिक रूप से निर्माण कर रहे हैं। (यहां मैचस्टिक्स की मुख्य प्रासंगिक विशेषता यह है कि वे काफी कठोर हैं और लगातार लंबाई है; कभी-कभी लोग इसके बजाय अन्य वस्तुओं का उपयोग करते हैं, जैसे कपास झाड़ू।)
इस चुनौती के लिए, हमें इस बात के लिए विशिष्ट नियमों को परिभाषित करने की आवश्यकता नहीं है कि माचिस की तीली की व्यवस्था कैसे की जाती है (जैसे कि कड़ी चुनौती होती है); इसके बजाय, हम सिर्फ इस बात की परवाह करते हैं कि किसी मैच संख्या का मूल्यांकन करने वाली अभिव्यक्ति का प्रतिनिधित्व करने के लिए हमें कितने मैचस्टिक्स की आवश्यकता होगी।
काम
यहां अंक और गणितीय संचालकों की एक वर्णमाला है जिसका आप उपयोग कर सकते हैं, प्रत्येक का मिलान में एक लागत है:
0
, 6 माचिस की लागत1
, 2 माचिस की लागत2
, 5 माचिस की लागत3
, 5 माचिस की लागत4
, 4 माचिस की लागत5
, 5 माचिस की लागत6
, 6 माचिस की लागत7
, 3 माचिस की लागत8
, 7 माचिस की लागत9
, 6 माचिस की लागत+
, 2 माचिस की लागत-
, 1 माचिस की लागत×
, 2 माचिस की लागत
(आप गैर-ASCII वर्णों का उपयोग करने की आवश्यकता से बचने के लिए अपने कार्यक्रम के आउटपुट के ×
रूप *
में प्रतिनिधित्व कर सकते हैं । अधिकांश एन्कोडिंग्स में ×
से अधिक बाइट्स लेता है *
, और इसलिए मुझे लगता है कि अधिकांश कार्यक्रम इस लाभ का लाभ उठाना चाहते हैं। ।)
आपको एक प्रोग्राम लिखना होगा जो एक नॉनवेजेटिव पूर्णांक को इनपुट के रूप में लेता है (किसी भी उचित माध्यम से ), और एक अभिव्यक्ति का उत्पादन करता है जो आउटपुट के रूप में मूल्यांकन करता है (फिर किसी भी उचित माध्यम से)। साथ ही, अभिव्यक्ति nontrivial होना चाहिए: यह कम से कम एक ऑपरेटर शामिल होना चाहिए +
, -
या, ×
। अंत में, आपके द्वारा आउटपुट की गई अभिव्यक्ति उन सभी आउटपुटों के बीच कुल मैचस्टिक लागत के मामले में सबसे सस्ती (या सबसे सस्ती के लिए बंधी हुई) होनी चाहिए, अन्यथा विनिर्देश के अनुसार।
स्पष्टीकरण
- आप कई अंकों को एक पंक्ति में कई अंकों के आउटपुट के माध्यम से बना सकते हैं (जैसे
11-1
उत्पादन के लिए एक वैध आउटपुट10
)। बस पूरी तरह से सटीक होने के लिए, परिणामी संख्या दशमलव में व्याख्या की जाती है। इस तरह का संघटन एक ऑपरेशन नहीं है जो मध्यवर्ती परिणामों पर काम करता है; केवल शाब्दिक अंकों पर जो मूल अभिव्यक्ति में दिखाई देते हैं। - इस चुनौती के उद्देश्य के लिए।
+
,-
और×
infix ऑपरेटर्स हैं; उन्हें अपने बाएं और अपने दाईं ओर एक तर्क की आवश्यकता है। आपको उन्हें उपसर्ग स्थिति में उपयोग करने की अनुमति नहीं है, जैसे+5
या-8
। - आपके पास कोष्ठक (या पूर्वता को नियंत्रित करने का कोई अन्य तरीका) उपलब्ध नहीं है। अभिव्यक्ति सामान्य डिफ़ॉल्ट पूर्वता नियमों के अनुसार मूल्यांकन करती है (गुणन पहले होता है, और फिर जोड़ और घटाव का मूल्यांकन बाएं से दाएं किया जाता है)।
- ऊपर सूचीबद्ध लोगों के अलावा आपके पास किसी भी गणितीय ऑपरेटर या स्थिरांक तक पहुंच नहीं है; "लेटरल थिंकिंग" समाधान अक्सर पज़लिंग में स्वीकार किए जाते हैं, लेकिन इसका अर्थ यह नहीं है कि कंप्यूटर को स्वयं उनके साथ आने की आवश्यकता है, और यहाँ पर PPCG पर, हमें यह पसंद है कि यह उद्देश्य सही है या नहीं।
- सामान्य पूर्णांक ओवरफ़्लो नियम लागू होते हैं: आपका समाधान आपकी भाषा के एक काल्पनिक (या शायद वास्तविक) संस्करण में मनमाने ढंग से बड़े पूर्णांकों के लिए काम करने में सक्षम होना चाहिए जिसमें सभी पूर्णांक डिफ़ॉल्ट रूप से अनबाउंड होते हैं, लेकिन यदि आपका प्रोग्राम कार्यान्वयन के कारण अभ्यास में विफल रहता है पूर्णांक का समर्थन नहीं कर रहा है, जो समाधान को अमान्य नहीं करता है।
- यदि आप एक ही अंक या ऑपरेटर का एक से अधिक बार उपयोग करते हैं, तो आपको हर बार इसका उपयोग करने पर इसकी मैचस्टिक लागत का भुगतान करना होगा (क्योंकि, जाहिर है, आप टेबल पर दो अलग-अलग स्थानों में एक ही भौतिक मैचस्टिक्स का पुन: उपयोग नहीं कर सकते हैं)।
- कोई समय सीमा नहीं है; जानवर बल समाधान स्वीकार्य हैं। (हालांकि यदि आपके पास एक समाधान है जो कि क्रूर बल से अधिक तेज़ है, तो इसे लंबे समय तक भी पोस्ट करने के लिए स्वतंत्र महसूस करें; यह देखते हुए कि वैकल्पिक दृष्टिकोण कितना दिलचस्प है।)
- यद्यपि आपके कोड की व्याख्या लिखना कभी आवश्यक नहीं है , यह एक अच्छा विचार होने की संभावना है; कोड-गोल्फ समाधान अक्सर पढ़ने के लिए बहुत कठिन होते हैं (विशेष रूप से उन लोगों से परिचित नहीं हैं जो उनकी भाषा में लिखे गए हैं), और यह मूल्यांकन करना कठिन हो सकता है (और इस तरह वोट दें) जब तक आप यह नहीं समझते कि यह कैसे काम करता है।
विजय की स्थिति
एक के रूप में कोड गोल्फ चुनौती, कम बाइट के साथ जवाब बेहतर माना जाता है। हालाँकि, हमेशा की तरह, विभिन्न दृष्टिकोणों के साथ या विशिष्ट भाषाओं में उत्तर देने के लिए स्वतंत्र महसूस करें, भले ही वे कुछ अन्य भाषाओं की तुलना में अधिक वर्बोज़ हों; गोल्फ का लक्ष्य वास्तव में यह देखना है कि आप किसी विशेष कार्यक्रम को कैसे अनुकूलित कर सकते हैं, और इस तरह से चीजें करने से हमें अनुकूलन के लिए बहुत सारे संभावित कार्यक्रम मिलते हैं। यदि कोई व्यक्ति पूरी तरह से अलग दृष्टिकोण, या पूरी तरह से अलग भाषा का उपयोग करके समाधान प्रस्तुत करता है, तो निराश न हों, और बहुत कम जवाब मिलता है; यह अच्छी तरह से हो सकता है कि आपका उत्तर बेहतर-अनुकूलित हो और अधिक कौशल दिखाता हो, और पीपीसीजी पर मतदाता अक्सर इसकी सराहना करते हैं।