কম বিশ্বাসযোগ্য বন্ধুদের জন্য একটি ব্যাংক


12

ভূমিকা

আপনি আপনার পিছনের আঙ্গিনায় আপনার তৈরি দেশে অর্থমন্ত্রী হিসাবে কাজ পেয়েছেন। আপনি এবং আপনার কম বিশ্বাসযোগ্য বন্ধুদের জন্য আপনি নিজের দেশে নিজের ব্যাংক তৈরি করার সিদ্ধান্ত নিয়েছেন। যেহেতু আপনি আপনার বন্ধুদের বিশ্বাস করেন না, তাই আপনার বন্ধুদের তৈরি করা মুদ্রা ব্যয় করা এবং আপনার অর্থনীতি ক্ষতিগ্রস্ত করা থেকে বিরত রাখতে সমস্ত লেনদেন বৈধ করার জন্য আপনি একটি প্রোগ্রাম লেখার সিদ্ধান্ত নিয়েছেন।

কার্য

প্রারম্ভিক ভারসাম্য এবং সমস্ত লেনদেনের ভিত্তিতে, এমন সমস্ত লেনদেনের ফিল্টার আউট করুন যেখানে কেউ অতিরিক্ত অর্থ ব্যয় করার চেষ্টা করে এবং যাকে বা তার থেকে ভবিষ্যতের লেনদেনগুলি ফিল্টার করে আবার কখনও আপনার ব্যাঙ্ক ব্যবহার না করে (এটিতে কোনও বদ্ধ অ্যাকাউন্টে অর্থ ব্যয় করার চেষ্টা অন্তর্ভুক্ত) যাকে ছাড়িয়ে যাওয়ার চেষ্টা করে block / তার ব্যাংক অ্যাকাউন্ট।

ইনপুট আউটপুট

দুটি তালিকা Aএবং Bইনপুট হিসাবে এবং Cআউটপুট হিসাবে একটি তালিকা । Aফর্ম্যাট সহ প্রতিটি অ্যাকাউন্টের প্রারম্ভিক ভারসাম্য [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]Bবিন্যাসের সাথে লেনদেনের একটি তালিকা [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]যেখানে ["Bob", "Alice", 3]বব এলিস 3 মুদ্রা ইউনিট প্রদান করতে চায় তার অর্থ। Cহিসাবে একই বিন্যাস থাকা উচিত BA, Bএবং Cকোনও যুক্তিসঙ্গত বিন্যাসে হতে পারে।

পরীক্ষার কেস

A: [["Alice", 5], ["Bob", 2]]
B: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]
C: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]

A: [["A", 2], ["B", 3], ["C", 5]]
B: [["C", "A", 2], ["B", "C", 4], ["A", "B", 2]]
C: [["C", "A", 2]]

A: [["A", 2], ["B", 3]]
B: [["A", "B", 2], ["A", "B", 2]]
C: [["A", "B", 2]]

A: [["A", 4], ["B", 0]]
B: [["A", "B", 1], ["A", "B", 5], ["A", "B", 2]]
C: [["A", "B", 1]]

A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["C", "B", 4]]
C: [["C", "B", 4]]

A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["B", "A", 4], ["C", "B" 2]]
C: []

স্কোরিং

এটি , প্রতিটি ভাষার মধ্যে বাইটের মধ্যে সংক্ষিপ্ততম কোড।


আইও ফর্ম্যাটটি কতটা কঠোর? গেল Aআরো একটি অভিধান, বা tuples একটি তালিকা হতে পারে?
লাইকনি

@ লাইকনি বা এমনকি কেবল ফর্মের একটি তালিকা ["A", 2, "B", 3, "C", 5]?
এরিক আউটগল্ফার

প্রস্তাবিত পরীক্ষা মামলা: A: [["A", 2], ["B", 3], ["C", 4]], B: [["A", "B", 3], ["C", "B", 4]], C: [["C", "B", 4]](একটি অবৈধ এক নিম্নলিখিত একটি বৈধ লেনদেন)।
আর্নাউল্ড

3
যদি কেউ অতিরিক্ত অর্থ ব্যয় করার চেষ্টা করে এবং উদ্দেশ্যপ্রাপ্ত প্রাপক ইতিমধ্যে ওভারস্পেন্টে চাপিয়ে ফেলেছে তবে কী হবে?
নাইট্রডন

দ্বিতীয় এবং তৃতীয় পরীক্ষার ক্ষেত্রে ["বি" 3] তে কোনও কমা নেই
জো কিং

উত্তর:


5

জাভাস্ক্রিপ্ট (ES6), 91 88 79 বাইট

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

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (a)(b)

a=>b=>b.filter(([x,y,z])=>(a[x]+=z)<0&a[y]<0?a[y]-=z:0,a.map(([x,y])=>a[x]=~y))

পরীক্ষার মামলা

সুন্দরী এবং মন্তব্য

a => b =>                 // given the two lists a and b
  b.filter(([x, y, z]) => // for each (x = payer, y = payee, z = amount) in b:
    (a[x] += z) < 0 &     //   update the payer's account; if it's still valid
    a[y] < 0 ?            //   and the payee's account is also valid:
      a[y] -= z           //     update the payee's account
    :                     //   else:
      0,                  //     do nothing
    a.map(([x, y]) =>     //   initialization: for each (x = owner, y = amount) in a:
      a[x] = ~y           //     set up this account (>= 0: closed, -1: $0, -2: $1, etc.)
    )                     //   end of map()
  )                       // end of filter()

a=>b=>b.filter(([x,y,z])=>(a[x]-=z)>0&a[y]>0?a[y]+=z:0,a.map(([x,y])=>a[x]=y+1))জাভাস্ক্রিপ্টে পার্ল সমাধান পোর্টিং সম্পর্কে কী ?
নাহুয়েল ফিউইলুল

পছন্দ করেছেন ধন্যবাদ!
আর্নল্ড


2

পাইথন 2 , 103 বাইট

A,B=input()
C=[]
for i in B:
 N,P,M=i
 if M>A[N]:A[N]=-1
 if A[N]>-1<A[P]:A[N]-=M;A[P]+=M;C+=i,
print C

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

-12 ovs ধন্যবাদ ।

আউটপুট ফর্ম্যাট বিধিনিষেধের কারণে দীর্ঘতর:

Cহিসাবে একই বিন্যাস থাকা উচিত B

অন্যথায় আমি 92 বাইটের জন্য এটি করতে পারতাম:

A,B=input()
for(N,P,M)in B:
 if M>A[N]:A[N]=-1
 if A[N]>-1<A[P]:A[N]-=M;A[P]+=M;print(N,P,M)


@ ওভস বাহ, এটি চালাক
এরিক দ্য আউটগোল্ফার

2

রুবি , 57 বাইট

->a,b{b.select{|(s,r,x)|a[r]+=x if[a[s]-=x,a[r]].min>-1}}

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

ইনপুট লাগে Aহিসেবে Hashবিন্যাসে {"A"=>2, "B"=>3}। ইনপুট Bএবং আউটপুটC প্রস্তাবিত বিন্যাসে রয়েছে।

ব্যাখ্যা

->a,b{                      # lambda function taking arguments A and B
b.select{|(s,r,x)|              # select items in B that return truthy (s = sender, r = receiver, x = amount)
            a[s]-=x,                # subtract amount from sender
        if [         a[r]].min>-1   # check if the smaller of the balances is non-negative
                                    # (true if both values are non-negative)
a[r]+=x                             # if so, add to the receiver's balance
}                               # the select function returns truthy when the above if statement passes
}

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