সমান্তরাল অ্যাকাউন্ট (দ্বিতীয় দিন)


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
Months মাস হিমশীতল এবং নতুনভাবে তৈরি করা অ্যাকাউন্টগুলির পরে, জানা গেছে যে মারির ব্যাংকার এখন একটি সানিটেরিয়ামে বন্দী রয়েছে। "আমরা আপনার বন্ধু। আপনার কিছুটা বিশ্রাম দরকার", তারা বলেছিল।
আরনাউল্ড

2
একক লেনদেনের প্রস্তাবিত পরীক্ষার কেস
ভেসকা

উত্তর:



4

পার্ল 6 , 25 বাইট

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

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমরা কেবল প্রদত্ত তালিকার একটি শূন্যকে পূর্বে রেখেছি ( 0,|$_আংশিক অঙ্কের একটি ক্রম তৈরি করেছি [\+](অর্থাত্ প্রথম উপাদান দ্বারা গঠিত ক্রম, প্রথম দুটি যোগফল, প্রথম তিনের যোগ ইত্যাদি)) এবং যে কোনওটির জন্য দেখুন ( grep) চূড়ান্ত অ্যাকাউন্টের রাজ্যের অর্ধের সমান সমান উপাদান (প্রদত্ত তালিকার যোগফল)। অবশেষে, আমরা তাদের সাথে একটি গণনা করি +


3

05 এ বি 1 , 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

জাভাস্ক্রিপ্ট (নোড.জেএস) , 45 বাইট

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

এটি অনলাইন চেষ্টা করুন!

ব্যবহার করে 4 বাইট সংরক্ষণ -~o[s]। শেগিকে ধন্যবাদ


আরনাউল্ডকে মারধর করার জন্য +1: ও
লুইস ফিলিপ দে জেসুস মুনোজ


@ লুইসেলপডিজেসুস মুনোজ, আরনল্ড (সর্বদা) অপরাজেয় নয়! ;)
শেগি

@ শেগি লিডিংয়ে +পরিবর্তন করা হয়েছে !, সুতরাং এটি ইনপুটটির জন্য কাজ করতে পারে [100]
tsh

আহ, বুঝতে পারিনি যে আমাদের সিঙ্গলটন অ্যারেগুলি পরিচালনা করতে হবে। ভালভাবে স্থির।
শেগি

2

পার্ল 5 -p , 42 41 বাইট

@ নাহুয়েলফৌইলুল একটি বাইট সংরক্ষণ করে

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

এটি অনলাইন চেষ্টা করুন!


y/ /+/;1 বাইট সংরক্ষণ করুন
নাহুয়েল ফুইলুল

34 টি বাইট অন্য পদ্ধতি ব্যবহার করে
নাহুয়েল ফিউইলুল


2

জাভাস্ক্রিপ্ট (ES6), 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

এপিএল (ডায়ালগ ইউনিকোড) , 21 বাইট এসবিসিএস

বেনামে ট্যাসিট প্রিফিক্স ফাংশন

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

এটি অনলাইন চেষ্টা করুন!

ɩ ndices
 এর
 লেনদেনের ট্যালি

0, শূন্য প্রিপেন্ড করুন

⊂()¨⍨ বাম আর্গুমেন্ট এবং লেনদেনের সম্পূর্ণ তালিকাকে ডান আর্গুমেন্ট হিসাবে স্বতন্ত্র আর্গুমেন্ট হিসাবে তাদের প্রত্যেকের সাথে নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন

 লেনদেনের সম্পূর্ণ তালিকা
() নীচের ফাংশনে বাম আর্গুমেন্ট হিসাবে
  ¨ প্রতিটি সূচকগুলিতে
    অদলবদল যুক্তি (যেমন ডানদিকে তালিকা, বাম দিকে সূচকগুলি) প্রয়োগ করা হয়:

   বাম থেকে যে অনেক ড্রপ

  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

+এর সাথে স্পেসগুলি প্রতিস্থাপন করুন এবং ফলাফলটি মূল্যায়ন করুন। গণনাও সাফ করুন।

@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 বাইটসকে ধন্যবাদ একটি এক্স ট্রিপল ডট হবেন না


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

এমএটিএল , 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

পাওয়ারশেল , 88 82 বাইট

-6 বাইটস ম্যাজিকে ধন্যবাদ

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=+, "$*"একটি স্ট্রিং যেখানে আর্গুমেন্ট দ্বারা সীমায়িত হয় বিস্তৃতি +সমষ্টি গাণিতিক এক্সপ্রেশন Eval এ,



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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.