मतलाब, 234 238 258 बाइट्स
मैं अन्य उत्तरों की सीमाओं के आधार पर मान रहा हूं कि इनपुट सरणी की संख्या क्रम fiat द्वारा बनाए रखा गया है।
n=length(x)-1
k=n*2+2
p=unique(nchoosek(repmat('*-+/',1,n),n),'rows')
p=[p char(' '*~~p(:,1))]'
c=char(x'*~~p(1,:))
o=p(:,r==cellfun(@eval,mat2cell(reshape([c(:) p(:)]',k,[]),k,0|p(1,:))))
reshape([repmat(x',size(o,2),1) o(:)]',k,[])'
यह कोड संख्याओं का एक स्ट्रिंग लेता है x
, कहता है x = '12345'
और एक परिणाम r
, कहता है r = 15
और अभिव्यक्ति के सभी स्ट्रिंग देता है जिसे आप चार ऑपरेटरों के उपयोग r
से प्राप्त करने के लिए मूल्यांकन कर सकते हैं x
।
मैं का उपयोग कर से बचने के लिए दो अलग अलग लंबाई-बराबर तरीके का उपयोग किया है ones(length())
प्रकार या repmat(length())
प्रकार भाव: ~~p(1,:)
जो रिटर्न नहीं-नहीं में मूल्यों p
(यानी, की एक सूची 1
के पहले आयाम के रूप में samelength रों p
) और 0|p(:,1)
जो 0 लौटाता है या है-वहाँ -a-value-in- p
(यानी, 1
दूसरे आयाम के समान लंबाई की सूची p
)।
मतलाब के पास nchoosek
प्रतिस्थापन विधि नहीं है, इसलिए मैंने ऑपरेटरों को कई बार सही संख्या में दोहराया है, ऑपरेटरों के nchoosek
उस बड़े चयन के लिए पूरे स्थान की गणना की , और फिर unique
परिणाम को नीचे गिराने के लिए एक कॉल का उपयोग किया जो यह होना चाहिए ('*** +' और '*** +' जैसे समतुल्य संयोजनों को हटाना)। मैं अनुरेखण प्रयोजनों के लिए इनपुट वेक्टर की लंबाई से मेल करने के लिए एक अनुगामी स्थान जोड़ता हूं और फिर एक मैट्रिक्स के कॉलम में इनपुट स्ट्रिंग्स के साथ ऑपरेटर स्ट्रिंग्स की रचना करता हूं। फिर मैं परिणाम प्राप्त करने के लिए भाव स्तंभ का मूल्यांकन करता हूं और उन संचालकों के क्रम का पता लगाता हूं जो उन स्तंभों से मेल खाते हैं जो हमारे इनपुट से मेल खाते हैं r
।
टेस्ट: x = '12345'
, r = 15
:
1*2*3+4+5
1+2+3+4+5
1-2*3+4*5
अगर मुझे दोहरे परिशुद्धता मूल्यों की एक सरणी लेनी थी, तो मुझे अपने स्कोर में x = num2str(x,'%d');
21 (20 ;
) को जोड़ते हुए अंकों को एक स्ट्रिंग में बदलने की आवश्यकता होगी । * अतिरिक्त बाइट्स अर्धविराम थे जिन्हें मैंने पूरी तरह से छोड़ दिया था ताकि इस कोड को चलाने वाला कोई भी व्यक्ति अपने कमांड प्रॉम्प्ट को लंबे एरेज़ के साथ न देख पाए। चूंकि मेरे संपादन में अब तार्किक और कोलोन-ऑपरेंड्स के बारे में चेतावनी का एक विशाल ढेर पैदा होता है, इसलिए मैंने नए संस्करण में अर्धविराम हटा दिए हैं।
संपादित करें 2: एक के 2*n+2
साथ बदलने के लिए भूल गया k
।
पुराना उत्तर:
n=length(x)-1;
p=unique(nchoosek(repmat(['*','-','+','/'],1,n),n),'rows');
l=length(p);
p=[p repmat(' ',l,1)]';
c=reshape([repmat(x',l,1) p(:)]',n*2+2,[]);
o = p(:,r == cellfun(@eval, mat2cell(c,n*2+2,ones(l,1))));
reshape([repmat(x',size(o,2),1) o(:)]',n*2+2,[])'
*
और/
पर निर्भरता है+
और-
? आपके दो उदाहरण एक दूसरे के विपरीत हैं।