एक अनुक्रम का संतुलन सूचकांक


10

किसी अनुक्रम का समतुल्य सूचकांक एक ऐसा सूचकांक है, जिसमें निम्न अनुक्रमित तत्वों का योग मुख्य अनुक्रमित तत्वों के योग के बराबर होता है। उदाहरण के लिए, A अनुक्रम में:

A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0

3 एक संतुलन सूचकांक है, क्योंकि:

A[0]+A[1]+A[2]=A[4]+A[5]+A[6]

6 भी एक संतुलन सूचकांक है, क्योंकि:

A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0

(शून्य तत्वों का योग शून्य है) 7 एक संतुलन सूचकांक नहीं है, क्योंकि यह अनुक्रम ए का वैध सूचकांक नहीं है।

यह विचार एक प्रोग्राम बनाने के लिए है जिसमें एक अनुक्रम (सरणी) दिया गया है, अपने संतुलन सूचकांक (किसी भी) या -1 को लौटाता है यदि कोई संतुलन सूचकांक मौजूद नहीं है।

जवाबों:


6

गोल्फस्क्रिप्ट 17 16

चूंकि इनपुट का रूप निर्दिष्ट नहीं है, यह स्टड से गोल्फस्क्रिप्ट सरणी प्रारूप में एक स्ट्रिंग लेता है।

~0\{1$+.@+\}/])?

इसलिए जैसे दौड़ते हैं

golfscript.ry eqindex.gs <<<"[-7 1 5 2 -4 3 0]"

यह विचार बहुत ही सरल है: यह एक सरणी में A_iऔर मानचित्रों की एक सरणी लेता है A_i + 2 SUM_{j<i} A_jऔर फिर पहले सूचकांक की तलाश करता है जो पूरे सरणी के योग के बराबर है।


@ मेलमोकब की चुनौती के लिए:

~0\{1$+.@+\}/:S;]:A,,{A=S=},`

29 वर्णों के लिए।


चूंकि आपके पास आसानी से सबसे छोटा समाधान है, इसलिए मैं घोषणा करता हूं कि आपको सभी अनुक्रमितों को वापस करना होगा, न कि केवल पहले एक :)
mellamokb

मेरी तारीफ के साथ @mellamokb।
पीटर टेलर

ठंडा! अब मुझे कुछ और गोल्फस्क्रिप्ट करने की सीख मिली है ...
मैलामोकब

5

पायथन - 72 वर्ण

A=input()
print[i for i in range(len(A))if sum(A[:i])==sum(A[i+1:])]or-1

अल्पविराम से अलग इनपुट लेता है


बहुत बढ़िया ... यह सब संतुलन के अनुक्रमित देता है ... वास्तव में अच्छा है।
क्रिस्टियन

@ क्रिसियन: मेरा भी ऐसा है।
FUZxxl

मैं देख रहा हूँ :) मुझे वास्तव में पता नहीं है कि कैसे हैसेल कोड चलाना है ... अध्ययन करना होगा।
क्रिस्टियन

ईसाई: वहाँ ghc, एक संकलक और एक दुभाषिया है। मुझे सुझाव है कि हग डाउनलोड करें । यह बेहतर है कि ghc डाउनलोड करें, क्योंकि hugs लगभग 7 MiB है, जबकि पूरे ghc का वितरण लगभग 300 MiB है। गले लगाकर, आप केवल runhugs FILE.hsप्रोग्राम चलाने के लिए टाइप कर सकते हैं FILE.hs
फुजेनक्ल

5

हास्केल ( 95 83)

e l=[n|n<-[0..length l-1],sum(take n l)==sum(drop(n+1)l)]
main=interact$show.e.read

स्टडिन से हास्केल शैली में एक सूची पढ़ता है, जैसे।

[-7,1,5,2,-4,3,0]

और सूचकांकों की एक हास्केल शैली सूची देता है, जैसे।

[3,6]

परिणाम है [], अगर कोई सूचकांक नहीं है।

कृपया मुझे बताएं, यदि आपकी कल्पना एक अलग व्यवहार चाहती है।

संपादन:

  • (95 → 83): सूची बोध अधिक संक्षिप्त है

4

सी - 96

a[99],*p=a,s;main(){for(;scanf("%d",p)>0;s+=*p++
);for(;p>a;s-=*p)(s-=*--p)||printf("%d\n",p-a);}

ध्यान दें कि यह रिवर्स ऑर्डर में संतुलन सूचकांकों को प्रिंट करता है।

नमूना उपयोग:

$ ./equilibrium <<< "-7 1 5 2 -4 3 0"
6
3

3

माणिक (83 77)

a=*$<.map(&:to_i)
p (0...a.size).select{|x|a[0..x].reduce(:+)==a[x..-1].reduce(:+)}

संपादित करें: वेंटरो द्वारा सुझाए गए अनुसार छोटा संस्करण:

a=$<.map &:to_i
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}

इनपुट प्रति पंक्ति एक नंबर है, आउटपुट कोमा को चौकोर कोष्ठक में अनुक्रमित सूची से अलग किया गया है।


1
आपको पहली पंक्ति में कोष्ठक की आवश्यकता नहीं है, और आप रकम प्राप्त करने के लिए join + eval का उपयोग करके कुछ वर्णों को बचा सकते हैं: p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}(ध्यान दें कि यह Ruby 1.9 के लिए है, क्योंकि यह वर्ण
शाब्दिकों

महान सुझाव, धन्यवाद! इस बात से नाराज कि अर्रे # राशि रूबी कोर में नहीं है।
लार्स हागेथ

यदि मैं पहली पंक्ति में परग्रहों को हटाता हूं, तो मुझे प्राप्त होता है: "सिंटैक्सएयर: (आईआरबी): 17: सिंटैक्स त्रुटि, अप्रत्याशित टेंपर, $ समाप्ति की उम्मीद"
लार्स हागेथ

वहाँ mapऔर ampersand के बीच एक स्थान होना चाहिए । और आप के सामने $<या तो अलग ऑपरेटर की जरूरत नहीं है , इसलिए सभी लाइन में सभी इस तरह दिखेंगे a=$<.map &:to_i:। ;)
वेंटरो

आह, धन्यवाद फिर से, यह वह छलावा था जिसने वाक्य रचना को बर्बाद कर दिया था।
लार्स हग्सथ

2

जावास्क्रिप्ट (161)

P=parseInt;L=prompt().split(',');S=function(A)A.reduce(function(a,b)P(a)+P(b),0);R=[i for(i in L)if(S(L.slice(0,i))==S(L.slice(P(i)+1)))];alert(R.length>0?R:-1);

http://jsfiddle.net/6qYQv/1/



2

जे (12 अक्षर)

मौन क्रिया में एक मौद्रिक क्रिया जो संतुलन सूचकांकों के एक वेक्टर को लौटाती है। केवल सुपाठ्यता के लिए डाला गया स्थान।

[: I. +/\. = +/\

इसे समझाने के लिए, पहले इसकी स्पष्ट परिभाषा देखें; yऔपचारिक पैरामीटर है:

3 : 'I. (+/\. y) = (+/\ y)'
  • +अपने तर्क जोड़ता है। /एक क्रिया विशेषण है जो इसके सही तर्क के सदस्यों के बीच इसके बचे हुए क्रिया को सम्मिलित करता है, जैसे +/ 1 2 3 4कि वही है 1 + 2 + 3 + 4
  • \एक क्रिया विशेषण है जो क्रिया को उसके बाएं से लेकर उसके दाएं तर्क के सभी उपसर्गों पर लागू करता है। उदाहरण के लिए, <अपने तर्क के चारों ओर एक बॉक्स बनाने के साथ , <\ 1 2 3 4उत्पादन करता है

    ┌─┬───┬─────┬───────┐
    │1│1 2│1 2 3│1 2 3 4│
    └─┴───┴─────┴───────┘
    
  • इस प्रकार, +/\इसके सही तर्क के प्रत्येक उपसर्ग के लिए गणना योग है।

  • \.पसंद है \लेकिन उपसर्गों के बजाय प्रत्ययों पर काम करता है। इस प्रकार, +/\.प्रत्ययों के योगों के एक वेक्टर की गणना करता है।
  • =इसके तर्कों की मद-वार तुलना करता है। उदाहरण के लिए, 1 1 3 3 = 1 2 3 4पैदावार 1 0 1 0
  • इस प्रकार, (+/\. y) = (+/\ y)सभी सूचकांकों के लिए एक प्राप्त होता है , जिस पर प्रत्यय योग उपसर्ग योग के बराबर होता है, या, एक संतुलन बनाया जाता है।
  • शून्य और लोगों के वैक्टर के लिए, I.उन सूचकांकों का एक वेक्टर लौटाता है जिस पर वेक्टर में एक होता है।

1

अजगर 2, 70

A=input()
e=i=s=0
for x in A:e=[e,~i][s*2==sum(A)-x];s+=x;i+=1
print~e

विचार चल रहे योग को ट्रैक करने sऔर यह जांचने के लिए है कि क्या यह वर्तमान तत्व के बिना सरणी के योग का आधा है, और इसलिए वर्तमान तत्व के बाद सरणी के योग के बराबर है। यदि ऐसा है, तो हम वर्तमान सूचकांक के लिए संतुलन सूचकांक को अपडेट करते हैं। -1यदि कोई नहीं है, तो अंतिम संतुलन सूचकांक मुद्रित होता है, या प्रारंभिक मूल्य ।

दरअसल, हम संतुलन सूचकांक के बिट-पूरक को स्टोर करते हैं ताकि हम इसे 0 के बजाय इनिशियलाइज़ कर सकें।


0

अजगर - 114

i=map(lambda x:int(x),raw_input().split(" "));x=0
print map(lambda x:(sum(i[0:x])==sum(i[x+1::])),range(0,len(i)))

अजगर - 72

i=input()
print map(lambda x:sum(i[0:x])==sum(i[x+1::]),range(0,len(i)))

दिए गए सूचकांक एक संतुलन सूचकांक है या नहीं प्रिंट करता है, पूर्णांक की अनिश्चितताओं को मुद्रित नहीं करता है जिस पर सरणी संतुलित है।


आपका क्या मतलब है यह टूट जाता है? 6 एक संतुलन सूचकांक है क्योंकि इससे पहले की वस्तुएं शून्य के बराबर हैं, इसके बाद कोई आइटम नहीं हैं, और 50 को अनदेखा किया गया है।
जॉय एडम्स

एएच। स्पष्टीकरण के लिए धन्यवाद joey, मुझे महसूस नहीं हुआ कि x पर मान को अनदेखा किया जाना चाहिए था।
3

0

PHP, 134 वर्ण

<?for($a=explode(",",fgets(STDIN));++$i<($c=count($a));$o.=$s==0?$i:"")for($n=$s=0;$n<$c;)$s+=$n<$i?$a[$n++]:-$a[++$n];echo$o?$o:"-1";

मेरे पास एक खुजली है कि यह इष्टतम PHP गोल्फिंग से दूर है, लेकिन बस भाप (दिमाग) से बाहर भाग गया। कम से कम यह array_sum और array_splice :-) से कम है


0

PHP (81)

for($i=count($a)-1,$c=0;$i+1&&$c!=(array_sum($a)-$a[$i])/2;$c+=$a[$i--]);echo $i;

http://3v4l.org/qJvhO

चूंकि कोई इनपुट निर्दिष्ट नहीं किया गया था, इसलिए इसे चर के साथ आरम्भ किया जाना चाहिए $a

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.