एक वेक्टर विभाजन वेक्टर की एक श्रृंखला को विभाजित कर रहा है जैसे कि उनका योग मूल है। यहाँ कुछ विभाजन दिए गए हैं:
[3, 1, 2] = [3, 1, 2]
[3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0]
[3, 1, 2] = [1, 1, 2] + [2, 0, 0]
यहाँ वेक्टर जोड़ तत्व-वार किया जाता है। एक वैध विभाजन में नकारात्मक पूर्णांक, या सभी-शून्य वेक्टर के साथ कोई वैक्टर नहीं होता है।
अब चुनौती एक प्रोग्राम या फ़ंक्शन लिखना है जो एक लक्ष्य वेक्टर दिए गए सभी संभावित वेक्टर विभाजन उत्पन्न करता है। यह अपेक्षाकृत आसान लग सकता है ...
... लेकिन एक ट्विस्ट है। यदि इनपुट वेक्टर का आकार L है, और यह सबसे बड़ा विभाजन उत्पन्न करता है जिसमें M तत्व हैं, तो आप O (L * M) मेमोरी से अधिक उपयोग नहीं कर सकते हैं।
आप मान सकते हैं कि एक पूर्णांक O (1) मेमोरी का उपयोग करता है। इसका मतलब है कि आपको विभाजन को आउटपुट करना चाहिए क्योंकि आप उन्हें उत्पन्न करते हैं। उसके ऊपर, आपको प्रत्येक विभाजन को केवल एक बार ही आउटपुट करना होगा। उदाहरण के लिए, ये समान विभाजन हैं:
[3, 1, 2] = [3, 0, 2] + [0, 1, 0]
[3, 1, 2] = [0, 1, 0] + [3, 0, 2]
यदि आप आउटपुट करते हैं तो आपका उत्तर दोनों अमान्य है।
इसके लिए सभी विभाजन [3, 2]
:
[3, 2]
[0, 1] + [3, 1]
[0, 1] + [0, 1] + [3, 0]
[0, 1] + [0, 1] + [1, 0] + [2, 0]
[0, 1] + [0, 1] + [1, 0] + [1, 0] + [1, 0]
[0, 1] + [1, 0] + [2, 1]
[0, 1] + [1, 0] + [1, 0] + [1, 1]
[0, 1] + [1, 1] + [2, 0]
[0, 2] + [3, 0]
[0, 2] + [1, 0] + [2, 0]
[0, 2] + [1, 0] + [1, 0] + [1, 0]
[1, 0] + [2, 2]
[1, 0] + [1, 0] + [1, 2]
[1, 0] + [1, 1] + [1, 1]
[1, 1] + [2, 1]
[1, 2] + [2, 0]
अपने उत्तर का परीक्षण करने के लिए, इसे चलाएं [3, 2, 5, 2]
। इसमें 17939 विभाजन उत्पन्न होने चाहिए, जो सभी के योग हैं [3, 2, 5, 2]
, और ये सभी अद्वितीय हैं (आप प्रत्येक विभाजन को पहले क्रमबद्ध करके विशिष्टता के लिए परीक्षण कर सकते हैं)।
बाइट्स में सबसे छोटा कोड जीतता है।