এন কয়েন এবং প্রতিটি ডিনমিনেশন ব্যবহার করে মুদ্রা পরিবর্তন সমস্যার গণনা


13

মুদ্রা পরিবর্তন সমস্যা খুব তথ্যসমৃদ্ধ করা হয়। অধ্যায়ের মুদ্রার সীমাহীন সরবরাহের x_1জন্য x_mআপনাকে সংযোজনগুলির সংখ্যার সন্ধান করতে হবে y। উদাহরণস্বরূপ, প্রদত্ত x = {1,2,3}এবং y = 4আমাদের চারটি সমন্বয় রয়েছে:

  1. {1,1,1,1}
  2. {1,1,2}
  3. {1,3}
  4. {2,2}

ভূমিকা

মুদ্রা পরিবর্তন সমস্যার বিভিন্ন প্রকারভেদ রয়েছে। এই প্রকরণে আমাদের দুটি অতিরিক্ত বিধিনিষেধ রয়েছে:

  1. প্রতিটি সম্প্রদায় অবশ্যই কমপক্ষে একবার ব্যবহার করা উচিত।
  2. ঠিক একটি নির্দিষ্ট সংখ্যক মুদ্রা অবশ্যই মোট ব্যবহার করতে হবে।

উদাহরণস্বরূপ, প্রদত্ত x = {1,2,3}, y = 36এবং n = 15যেখানে nযে কয়েন ব্যবহার করা আবশ্যক মোট সংখ্যা হয়, আমরা চার সমন্বয় পাবেন:

  1. {1,2,2,2,2,2,2,2,3,3,3,3,3,3,3} (1 টি, 7 টি, 7 টি ত্রয়ী)
  2. {1,1,2,2,2,2,2,3,3,3,3,3,3,3,3} (2 টি, 5 টি, 8 টি ত্রয়ী)
  3. {1,1,1,2,2,2,3,3,3,3,3,3,3,3,3} (3 টি, 3 জন, 9 টি ত্রয়ী)
  4. {1,1,1,1,2,3,3,3,3,3,3,3,3,3,3} (4 টি, 1 টিজো, 10 থ্রাইস)

চ্যালেঞ্জ

চ্যালেঞ্জটি হ'ল enumerateআপনার পছন্দের ভাষায় একটি ফাংশন লিখুন যা উপরে বর্ণিত সমস্ত সংযোজনকে গণ্য করে:

  1. সংখ্যার তালিকা। উদাহরণস্বরূপ {1,5,10,25}। আপনি তালিকাগুলি বা অ্যারে ব্যবহার করতে পারেন।
  2. একটি অ-নেতিবাচক পূর্ণসংখ্যা yযা প্রতিটি সংমিশ্রণের যোগফলকে বোঝায়।
  3. একটি অ-নেতিবাচক পূর্ণসংখ্যা nযা কয়েনের মোট সংখ্যাকে বোঝায়।

আর্গুমেন্টের ক্রম কোনও ব্যাপার না। পয়েন্টফ্রি ফাংশন অনুমোদিত।

enumerateফাংশনের আউটপুট অবশ্যই সংমিশ্রনের একটি তালিকা হতে হবে। প্রতিটি সংমিশ্রণটি অবশ্যই অনন্য হতে হবে এবং এটি অবশ্যই nপূর্ণসংখ্যার একটি তালিকা হতে পারে যা পর্যন্ত যুক্ত হয় y। প্রতিটি সংজ্ঞা কমপক্ষে একবারে প্রতিটি সংমিশ্রণে উপস্থিত হওয়া উচিত এবং কোনও সংমিশ্রণ অনুপস্থিত হবে। পূর্ণসংখ্যার ক্রয় এবং সংমিশ্রণগুলি বিবেচনা করে না। আপনি আউটপুট জন্য তালিকা বা অ্যারে ব্যবহার করতে পারেন।

নিম্নলিখিত প্রান্ত ক্ষেত্রে মনে রাখবেন:

  1. যদি উভয় yএবং nশূন্য হয় এবং সংখ্যার তালিকা খালি থাকে তবে আউটপুট হ'ল একটি সংমিশ্রনের তালিকা, খালি সংমিশ্রণ (অর্থাত্ {{}})।
  2. অন্যথায়, যদি yশূন্য হয়, nশূন্য হয় বা সংখ্যার তালিকা খালি থাকে তবে আউটপুটটি শূন্য সংমিশ্রনের তালিকা (অর্থাত্ {})।
  3. আরও সাধারণভাবে, যদি yসংখ্যার যোগফলের nচেয়ে কম হয় বা সংখ্যার সংখ্যার চেয়ে কম হয় তবে আউটপুটটি শূন্য সংমিশ্রনের একটি তালিকা of

স্কোরিং বাইটগুলিতে পুরো প্রোগ্রামের আকারের উপর ভিত্তি করে তৈরি করা হবে। মনে রাখবেন যে এতে enumerateফাংশন, সহায়ক ফাংশন, আমদানি বিবৃতি ইত্যাদি অন্তর্ভুক্ত রয়েছে এতে পরীক্ষার কেসগুলি অন্তর্ভুক্ত নয়।


খুব নিশ্চিত যে আমি এই চ্যালেঞ্জটি কোথাও দেখেছি ...
লিকি নুন

আমি আশা করি এই প্রশ্নটি সদৃশ নয়। কোড গল্ফে আমি একই প্রশ্নটি খুঁজে পাইনি। অতএব, আমি এটি পোস্ট।
অদিত এম শাহ

@ পিটারটেলর যদি yসংখ্যার যোগফলের তুলনায় কম হয় তবে আপনার পুনরাবৃত্ত সমাধানের এক পর্যায়ে আপনি সেই বেস কেসে পৌঁছে যাবেন যেখানে ডিনোমিনেশনগুলির তালিকা খালি রয়েছে। সুতরাং, উত্তরটি হবে {}(অর্থাত্ কোনও সমাধান পাওয়া যায় নি)। যদি nসংখ্যার সংখ্যার চেয়ে কম হয় তবে আপনি অবশেষে বেস কেসে পৌঁছে যাবেন n = 0তবে কিন্তু y != 0। অতএব, উত্তর আবার হবে {}
অদিত এম শাহ

পছন্দ করুন আমি বাস্তবায়নের বিশদ সম্পর্কে খুব বেশি ধরে নিয়েছি। আপনি কি তা ঠিক করতে জানেন?
অদিত এম শাহ

10
আমি প্রস্তাব দিচ্ছি যে আপনি একটি কার্যকরী উত্তর না পাওয়া পর্যন্ত "স্বীকৃত" পতাকাটি সরিয়ে ফেলুন। এবং সাধারণভাবে গ্রহণের আগে কয়েক দিন অপেক্ষা করা বুদ্ধিমানের।
পিটার টেলর

উত্তর:


2

05 এ বি 1 ই, 20 বাইট

g-¹sã€{Ùvy¹«DO³Qiˆ}¯

ইনপুট অনুক্রম হল: list of values, nr of coins, sum to reach

সংক্ষেপে ব্যাখ্যা

  1. দৈর্ঘ্যের মুদ্রা তালিকার সমস্ত অনুমতি পান: final length - length of unique coin list
  2. এই তালিকায় অনন্য কয়েনগুলির তালিকা যুক্ত করুন।
  3. সমষ্টি যদি চাওয়া রাশি সমান হয় তবে তালিকাটি সংরক্ষণ করুন
  4. সমস্ত সংরক্ষিত তালিকা আউটপুট

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

অনলাইন সংকলক প্রচুর পরিমাণে কয়েন পরিচালনা করতে পারে না।


4

এমএটিএল , 22 বাইট

Z^!S!Xu!tsi=Z)"1G@m?@!

ইনপুট অর্ডারটি হ'ল: সংখ্যার অ্যারে, নেওয়া মুদ্রার সংখ্যা ( n), পছন্দসই যোগফল ( y)।

প্রতিটি সংমিশ্রণটি একটি ভিন্ন লাইনে প্রদর্শিত হয়। খালি আউটপুট খালি স্ট্রিং হিসাবে প্রদর্শিত হয় (তাই কিছুই নয়)।

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

চ্যালেঞ্জের উদাহরণের জন্য অনলাইন সংকলকটিতে কোডটি মেমরির বাইরে চলে গেছে, তবে একটি স্ট্যান্ডার্ড, যুক্তিযুক্ত আধুনিক কম্পিউটারের সাথে অফলাইনে কাজ করে:

>> matl
 > Z^!S!Xu!tsi=Z)"1G@m?@!
 > 
> [1 2 3]
> 15
> 36
1 1 1 1 2 3 3 3 3 3 3 3 3 3 3
1 1 1 2 2 2 3 3 3 3 3 3 3 3 3
1 1 2 2 2 2 2 3 3 3 3 3 3 3 3
1 2 2 2 2 2 2 2 3 3 3 3 3 3 3

ব্যাখ্যা

Z^      % Implicitly input array of denomminations and number of coins n. Compute 
        % Cartesian power. This gives 2D array with each "combination"
        % on a different row
!S!     % Sort each row
Xu      % Deduplicate rows
!       % Transpose: rows become columns. Call this array A
ts      % Push a copy, compute sum of each column
i       % Input y (desired sum)
=       % Logical array that contains true if the "combination" has the desired sum
Z)      % Keep only those columns in array A
"       % For each column
  1G    %   Push array of denominations again
  @     %   Push current column
  m     %   Is each denomination present in the column?
  ?     %   If so
    @!  %     Push current column again. Transpose into a row
        %   End if
        % End for
        % Implicitly display stack contents

3

পাইথন 3, 120 106 বাইট

from itertools import*
lambda d,t,l:[i+d for i in combinations_with_replacement(d,l-len(d))if sum(i+d)==t]

একটি বেনামে ফাংশন যা ফর্মের একটি বর্ণমালার ইনপুট নেয় (x_1, x_2, x_3 ... , x_k), একটি লক্ষ্য মান এবং যুক্তির মাধ্যমে বেশ কয়েকটি মুদ্রার আকার দেয় এবং ফর্মের টিপলগুলির একটি তালিকা ফেরত দেয় [(solution_1), (solution_2), (solution_3), ... (solution_k)]

কিভাবে এটা কাজ করে

Itertoolsএর combinations_with_replacementফাংশনটি l-len(d)সংখ্যার প্রতিস্থাপনের সাথে সমস্ত সংমিশ্রণ তৈরি করতে ব্যবহৃত হয় । dএই প্রতিটি সংমিশ্রণে সংযোজন করে, গ্যারান্টি দেওয়া হয় যে প্রতিটি বর্ণ কমপক্ষে একবার উপস্থিত হয়েছিল এবং নতুন সংমিশ্রণের দৈর্ঘ্য রয়েছে l। যদি সংমিশ্রণের উপাদানগুলির যোগফল হয় t, তবে সংমিশ্রণটি টিউপল হিসাবে ফিরতি তালিকায় যুক্ত হয়।

আইডিয়নে চেষ্টা করে দেখুন


108 বাইট জন্য একটি বিকল্প পদ্ধতি

from itertools import*
lambda d,t,l:set(tuple(sorted(i+d))for i in product(d,repeat=l-len(d))if sum(i+d)==t)

একটি বেনামে ফাংশন যা ফর্মের একটি বর্ণমালার একটি ইনপুট নেয় (x_1, x_2, x_3 ... , x_k), একটি লক্ষ্য মান, এবং যুক্তির মাধ্যমে বেশ কয়েকটি মুদ্রার আকার দেয় এবং ফর্মের tuples একটি সেট প্রদান করে {(solution_1), (solution_2), (solution_3), ... (solution_k)}

এটি কীভাবে কাজ করে (অন্যান্য সংস্করণ)

এটি productথেকে ডিনোমিনেশনগুলির itertoolsসমস্ত l-len(d)ব্যবস্থা উত্পন্ন করতে ফাংশনটি ব্যবহার করে । dএই প্রতিটি সংমিশ্রণে সংযোজন করে, গ্যারান্টি দেওয়া হয় যে প্রতিটি বর্ণ কমপক্ষে একবার উপস্থিত হয়েছিল এবং নতুন সংমিশ্রণের দৈর্ঘ্য রয়েছে l। যদি সংমিশ্রণের উপাদানগুলির যোগফল হয় tতবে সংমিশ্রণটি বাছাই করা হয়, তালিকা থেকে একটি টুপলে রূপান্তরিত হয় এবং ফেরতের টিউপসগুলিতে যুক্ত হয়। অবশেষে, কলিং setকোনও নকলকে সরিয়ে দেয়।

আইডিয়নে এটি চেষ্টা করুন (অন্যান্য সংস্করণ)


0

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

g=(a,n,y,r)=>n>0?y>0&&a.map((x,i)=>g(a.slice(i),n-1,y-x,[...r,x])):n|y||console.log(r)
(a,n,y)=>g(a,n-a.length,a.reduce((y,x)=>y-x,y),a)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.