समानांतर खाते (दिन 2)


10

मेरे विश्वविद्यालय कोड चैलेंज प्रतियोगिता से अनुमति के साथ चुनौती ली गई


कुछ महीने पहले अपनी पढ़ाई खत्म करने के बाद, मैरी ने शहर में अपनी पहली नौकरी का भुगतान प्राप्त करना शुरू करने के लिए एक बैंक खाता खोला। तब से वह इसके साथ कुछ लेनदेन कर रही है। उसका पहला भुगतान $ 1000 डॉलर था। उस पैसे से उसने रात के खाने के लिए भुगतान किया जिसमें उसने अपने माता-पिता को आमंत्रित किया (रात के खाने की लागत $ 150 डॉलर), फिर, उसने एक प्रसिद्ध सुपरमार्केट ($ 80 डॉलर) में खरीदारी की और अपनी छुट्टियों (200 डॉलर) के लिए होटल आरक्षण किया। महीने के अंत में उसे फिर से भुगतान मिला (1040 डॉलर, पिछले महीने की तुलना में थोड़ा अधिक) और उस दिन के बाद उसने सुपरमार्केट में एक और $ 70 डॉलर खर्च किए।

आज, उसे एहसास हुआ कि अगर सुपरमार्केट में पहले $ 80 डॉलर का भुगतान करने के बाद एक दूसरा खाता बनाया गया था और पहले एक जमे हुए थे, तो दोनों खातों में बिल्कुल समान संतुलन होगा:

100015080Total=770200104070Total=770

यह कार्यक्रम उसके लिए इतना दुर्लभ था कि वह यह पता लगाना जारी रखना चाहती थी कि उसके खाते और उसके दोस्तों की हरकतें भी हैं या नहीं।

चुनौती

लेन-देन की सूची को देखते हुए, उस समय के इंस्टेंट की संख्या को आउटपुट करें जिसमें बैंक खाते का मालिक एक दूसरा खाता बना सकता था ताकि दोनों का एक ही अंतिम संतुलन हो।

उदाहरण: [1000, -150, -80, -200, 1040, -70]

1)Total=0100015080200104070Total=1540
2)1000Total=100015080200104070Total=540
3)1000150Total=85080200104070Total=690
4)100015080Total=770200104070Total=770
5)100015080200Total=570104070Total=970
6)1000150802001040Total=161070Total=70
7)100015080200104070Total=1540Total=0

परीक्षण का मामला

  • इनपुट: 1000 -150 -80 -200 1040 -70आउटपुट:1
  • इनपुट: 100 -100आउटपुट:2
  • इनपुट: 1 2 3आउटपुट:1
  • इनपुट: 10 -20 15आउटपुट:0
  • इनपुट: 15 -15 15 -15आउटपुट:3
  • इनपुट: 1आउटपुट:0

टिप्पणियाँ


11
जमे हुए और नए बनाए गए खातों के 6 महीनों के बाद, यह बताया गया है कि मैरी के बैंकर को अब एक सैनिटेरियम में नजरबंद कर दिया गया है। "हम आपके दोस्त हैं। आपको कुछ आराम की ज़रूरत है", उन्होंने कहा।
अरनौलद

2
एकल लेन
Veskah

जवाबों:



4

पर्ल 6 , 25 बाइट्स

{+grep .sum/2,[\+] 0,|$_}

इसे ऑनलाइन आज़माएं!

व्याख्या

हम केवल दी गई सूची में एक शून्य प्रीपेंड करते हैं ( 0,|$_), आंशिक योगों का एक क्रम बनाते हैं [\+](यानी पहले तत्व द्वारा गठित अनुक्रम, पहले दो का योग, पहले तीन का योग आदि), और grepकिसी के लिए ( ) देखें। तत्व जो अंतिम खाता स्थिति के आधे के बराबर हैं (दी गई सूची का योग)। अंत में, हम उन्हें एक के साथ गिनते हैं +


3

05AB1E , 11 बाइट्स

0.ø.œ2ùO€ËO

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

0.ø          # Surround the (implicit) input list with a leading and trailing 0
             #  i.e. [100,-100] → [0,100,-100,0]
           # Get all possible partitions to divide the list
             #  → [[[0],[100],[-100],[0]],[[0],[100],[-100,0]],[[0],[100,-100],[0]],[[0],[100,-100,0]],[[0,100],[-100],[0]],[[0,100],[-100,0]],[[0,100,-100],[0]],[[0,100,-100,0]]]
     2ù      # Only leave partitions consisting of 2 items
             #  → [[[0],[100,-100,0]],[[0,100],[-100,0]],[[0,100,-100],[0]]]
       O     # Take the sum of each
             #  → [[0,0],[100,-100],[0,0]]
        €Ë   # Check of each inner list if both sums are equal (1 if truthy; 0 if falsey)
             #  → [1,0,1]
          O  # Take the sum of that (and output as result)
             #  → 2


3

जावास्क्रिप्ट (Node.js) , 45 बाइट्स

a=>!a.map(v=>o[s+=v]=-~o[s],s=0,o=[1])|o[s/2]

इसे ऑनलाइन आज़माएं!

उपयोग करके 4 बाइट्स बचाएं -~o[s]। धन्यवाद झबरा।


O: Arnauld की धड़कन के लिए +1
लुइस फेलिप डे जीसस मुनोज़


@LuisfelipeDejesusMunoz, अर्नुलद अजेय (हमेशा) अपराजेय नहीं है! ;)
झबरा

@ शैगी अग्रणी +को बदल दिया गया है !, इसलिए यह इनपुट के लिए काम कर सकता है [100]
tsh

आह, हमें एहसास नहीं था कि हमें सिंगलटन सरणियों को संभालना था। अच्छी तरह से तय किया हुआ।
झबरा

2

पर्ल 5 -p , 42 41 बाइट्स

@NahuelFouilleul एक बाइट बचाता है

y/ /+/;$\+=eval$'==eval$`while/^|$|\+/g}{

इसे ऑनलाइन आज़माएं!


y/ /+/;1 बाइट बचाता है
नहुएल फौइलुल

अन्य दृष्टिकोण का उपयोग करते हुए 34 बाइट्स
नहुएल फौलीउल


2

जावास्क्रिप्ट (ईएस 6), 52 बाइट्स

a=>a.map(x=>n+=(s+=x)==eval(a.join`+`)-s,n=s=0)|n+!s

इसे ऑनलाइन आज़माएं!

टिप्पणी की गई

a =>                        // a[] = input array
  a.map(x =>                // for each element x in a[]:
    n +=                    //   increment n if the following test is truthy:
      (s += x)              //     update the left sum
      ==                    //     and test whether it's equal to
      eval(a.join`+`) - s,  //     the right sum
    n = s =0                //   start with n = s = 0
  )                         // end of map()
  | n                       // yield n; if the final sum is 0, it means that we could have
  +                         // created a balanced account at the beginning of the process;
  !s                        // so, we increment n if it is

पुनरावर्ती संस्करण,  54  53 बाइट्स

f=(a,s=0)=>a+a?(s==eval(a.join`+`))+f(a,s+a.pop()):!s

इसे ऑनलाइन आज़माएं!


मैं बस उस 52-बाइट संस्करण का सुझाव देने वाला था!
झबरा

@ शैगी हाँ, मैंने गैर-पुनरावर्ती संस्करण को भी जल्द ही त्याग दिया क्योंकि मुझे लगा कि पुनरावर्ती छोटा हो सकता है।
अरनौलड

2

एपीएल (Dyalog यूनिकोड) , 21 बाइट्स SBCS

बेनामी tacit उपसर्ग समारोह

+/⊂((+/↑)=1⊥↓)¨⍨0,⍳∘≢

इसे ऑनलाइन आज़माएं!

ɩ ndices
 के
 लेन-देन की संख्या

0, शून्य को रोकना

⊂()¨⍨ उनमें से प्रत्येक के साथ निम्नलिखित तर्क कार्य को बाएं तर्क के रूप में और लेन-देन की संपूर्ण सूची को सही तर्क ( स्वैप तर्क) के रूप में लागू करें

 लेन-देन की पूरी सूची
(... ) नीचे दिए गए फ़ंक्शन के लिए बाएं तर्क के रूप में  स्वैप किए गए तर्कों के
  ¨ प्रत्येक सूचकांक पर लागू होती
   है (यानी दाईं ओर सूची, बाईं ओर सूचकांकों:

   छोड़ दिया है कि बहुत से छोड़ दिया

  1⊥ योग (बेस -1 में मूल्यांकन)

  (... )= क्या यह (0/1) के बराबर है ...

    बाईं ओर से कई लेनदेन करें

   +/ उन्हें योग

+/ सत्य की गिनती पाने के लिए उस बूलियन सूची का योग करें


2

बैच, 84 बाइट्स

@set s=%*
@set/as=%s: =+%,c=0
@for %%n in (0 %*)do @set/as-=%%n*2,c+=!s
@echo %c%

कमांड-लाइन तर्कों के रूप में इनपुट लेता है। स्पष्टीकरण:

@set s=%*

रिक्त स्थान के साथ तर्कों में शामिल हों।

@set/as=%s: =+%,c=0

रिक्त स्थान को +s से बदलें और परिणाम का मूल्यांकन करें। गिनती भी साफ करें।

@for %%n in (0 %*)do @set/as-=%%n*2,c+=!s

प्रत्येक राशि के लिए, योग से दोगुना घटाएं। यदि परिणाम शून्य है, तो यह एक वैध मैच है, इसलिए गिनती बढ़ाएँ। शुरुआत में अतिरिक्त शून्य किसी भी राशि से पहले एक मैच के लिए अनुमति देता है।

@echo %c%

परिणाम प्रिंट करें।


2

चारकोल , 15 बाइट्स

⊞θ⁰IΣEθ⁼Σθ⊗Σ✂θκ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

 θ              Input list
  ⁰             Literal 0
⊞               Push to list
      θ         Augmented list
     E          Mapped to
             θ  Augmented list
            ✂   Sliced from
              κ Current index
           Σ    Summed
          ⊗     Doubled
       ⁼        Equals
         θ      (Augmented) list
        Σ       Summed
    Σ           Sum of booleans
   I            Cast to string
                Implicitly print

दुर्भाग्य से चारकोल में Sum([])ऐसा नहीं 0है मुझे यह सुनिश्चित करना है कि योग करने के लिए हमेशा कम से कम एक तत्व हो।


2

पायथन 3 , 67 58 बाइट्स

lambda l:sum(sum(l[:x])*2==sum(l)for x in range(len(l)+1))

इसे ऑनलाइन आज़माएं!

-9 बाइट्स @ के लिए धन्यवाद x- ट्रिपल डॉट मत बनो


1
छानने के बजाय गर्म करने से आपको 7 बाइट्स बचेंगे lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1)):।
श्री एक्सकोडर

sum(l[:x])*2==sum(l)आपको एक और 2 बाइट्स बचाता है।
नील


2

MATL , 9 बाइट्स

s0GhYsE=s

इसे ऑनलाइन आज़माएं!

कुछ अन्य उत्तरों के रूप में एक ही दृष्टिकोण: एक शून्य को पूर्व निर्धारित करें, और जांचें कि कुल योग के बराबर कितनी बार संचयी राशि है।

s   % Total sum of (implicit) input
0Gh % Prepend 0 to another copy of the input
Ys  % Cumulative sum
E=  % Check element-wise equality of 2*cumulative sum with total sum
s   % Sum number of `true` values

2

जाप -x , 14 11 बाइट्स

iT å+ ®¥nUx

कोशिश करो

iT å+ ®¥nUx     :Implicit input of array U
i               :Prepend
 T              :  Zero
   å+           :Cumulatively reduce by addition
      ®         :Map each Z
       ¥        :  Test for equality with
        n       :  Z subtracted from
         Ux     :  U reduced by addition
                :Implicitly reduce by addition and output

2

पॉवरशेल , 88 82 बाइट्स

-6 बाइट्स mazzy के लिए धन्यवाद

param($n)0..($x=$n.length)|%{$i+=+$z-eq($n[$_..$x]|measure -Su).sum;$z+=$n[$_]};$i

इसे ऑनलाइन आज़माएं!

यह एक बहुत ही भद्दा तरीका लगता है लेकिन इसे काम मिल गया। मैं कोशिश करूँगा और भविष्य में इसे फिर से नया करूँगा।


1
आप $i+=<predicate>इसके बजायif(<predicate>){$i++}
mazzy



1

बैश, 52 बाइट्स

IFS=+;for i in 0 $@;{((c+=2*(x+=i)=="$*"));};echo $c

TIO

ट्रिक: सेटिंग IFS=+, "$*"एक स्ट्रिंग में फैलती है जहां तर्क द्वारा सीमांकित किया जाता है +, अंक में अंकगणितीय अभिव्यक्ति के लिए



0

जे , 19 बाइट्स

1#.[:(={:-])0+/\@,]

इसे ऑनलाइन आज़माएं!

व्याख्या

1 #. [: (= ({: - ])) 0 +/\@, ]

                     0     , ]  NB. prepend 0 to input...
                       +/\@     NB. and take the prefix sums...
     [:    ({: - ])             NB. then subtract that list
                                NB. from its final elm 
                                NB. (`{:`), giving the list
                                NB. of suffix sums...
     [: (= (      ))            NB. create a 1-0 list showing
                                NB. where the prefix sums 
                                NB. equal the suffix sums
1 #.                            NB. and take the sum.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.