এই মানটি কি অনন্য কয়েন এবং / অথবা নোট দিয়ে তৈরি করা যেতে পারে?


29

একটি প্রোগ্রাম লিখুন যা গণনা করে যদি কোনও ইনপুটযুক্ত আর্থিক মান, একটি পূর্ণসংখ্যা হিসাবে, মুদ্রা এবং / অথবা নোটগুলির একটি অনন্য সংমিশ্রণ দ্বারা উপস্থাপন করা যায়, যার অর্থ একই মুদ্রা / নোটটি একাধিকবার ব্যবহার করা যায় না।

আপনার প্রোগ্রামটির ইনপুট হিসাবে একটি মান নেওয়া উচিত এবং এটি ইনপুট দ্বারা বা আপনার ভাষার সমান অ্যারের মাধ্যমে মুদ্রা / নোটের মানগুলির একটি তালিকা নিতে পারে। মুদ্রা / নোটগুলির তালিকা পরিবর্তন করতে সক্ষম হওয়া উচিত, সুতরাং আপনি যদি ধ্রুবক ব্যবহার করছেন তবে এটি কোথায় সংজ্ঞায়িত হয়েছে তা নিশ্চিত হয়ে নিন।

আপনার প্রোগ্রামটি যথাক্রমে কোনও সত্য / মিথ্যা মান আউটপুট করা উচিত।

দয়া করে নোট করুন যে মুদ্রা / নোটগুলির তালিকা আউটপুট করা যা মান তৈরি করে না

EXAMPLE টি

ইউকে পাউন্ড ব্যবহার করে, (£ 1.00 = 100 এবং 20 420.69 = 42069)

coins = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]

নিম্নলিখিত সত্য আউটপুট হবে:

6 (1, 5)
15 (10, 5)
88 (1, 2, 5, 10, 20, 50)
512 (500, 10, 2)
7003 (5000, 2000, 2, 1)

নিম্নলিখিত আউটপুট মিথ্যা হবে:

4
209
8889
4242424242
[ANYTHING ABOVE 8888]

অলটারনেটিভ টেস্ট ডেটা (মার্কিন ডলার)

coins = [1, 5, 10, 25, 50, 100, 200, 500, 1000, 2000, 5000, 10000]

শুভকামনা!


4
আমি চাই আমরা আপনার মতো আরও নতুন
আগত


2
আলাদা কয়েনের সেট ব্যবহার করে আপনার কিছু টেস্টকেস যুক্ত করা উচিত
লিকি নুন

2
আমি এমন পরীক্ষার কেসগুলি যুক্ত করার পরামর্শ দেব যা সবচেয়ে বেশি অব্যবহৃত মুদ্রা গ্রহণের লোভী urদ্ধত্যের সাথে সমাধান করা যায় না is এটিই সর্বাধিক অবশিষ্ট মূল্য। যেখানে ইনপুটটি বাছাই করা হয় না এবং যেখানে একাধিক উপায়ে মান তৈরি করা যায় সেগুলি পাওয়াও ভাল। পরীক্ষার কেসগুলির পক্ষে সম্ভাব্যতা এড়াতে ভাল হয় যে কেউ যে সমস্যাটিতে পরীক্ষার ক্ষেত্রে সব কিছুর সঠিক না হয়ে কাজ করে তার জন্য যুক্তিসঙ্গত চেষ্টা করে।
xnor

2
সম্পর্কিতসম্পর্কিত । পূর্ববর্তী প্রশ্নটি তর্কযোগ্যভাবে একটি সদৃশ, তবে এই প্রশ্নটি আইএমও আরও ভাল ডিজাইনের এবং আমরা যদি একটি নকল হিসাবে বন্ধ করতে চাই, তবে আমি বরং পুরানোটিটি বন্ধ করব।

উত্তর:


13

ব্র্যাচল্যাগ 2 (টিআইও নেক্সাস), 2 বাইট

⊇+

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

স্ট্যান্ডার্ড ইনপুট মাধ্যমে বা প্রোগ্রামের শুরুতে এটির অ্যারেটারাল হিসাবে প্রেন্ডিংয়ের মাধ্যমে মুদ্রার তালিকা নিয়ে যায় (হয় কাজ করবে, সুতরাং এটি আপনার উপর নির্ভর করে যে আপনি "আরও বৈধ" বলে মনে করছেন; পূর্ববর্তীটি ডিফল্টরূপে অনুমোদিত হয় পিপিসিজি নিয়ম, পরে বিশেষত প্রশ্ন দ্বারা অনুমোদিত); এবং একটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে উত্পাদন মান নেয়।

ব্যাখ্যা

এই প্রোগ্রামটি ব্র্যাচল্যাগ ফাংশনগুলির জন্য টিআইও নেক্সাসের মোড়কের উপায় বাস্তবায়নের বিশদটি ব্যবহার করে; বিশেষত, এটি আপনাকে আউটপুট মাধ্যমে ইনপুট দেওয়ার জন্য একটি কমান্ড-লাইন আর্গুমেন্ট দেয়। (এটি ব্র্যাচল্যাগের মূল নকশায় কল্পনা করা হয়নি; তবে, পিপিসিজিতে তাদের প্রয়োগের মাধ্যমে ভাষাগুলি সংজ্ঞায়িত করা হয়, এবং যদি কোনও বাস্তবায়ন যদি আমার প্রয়োজন অনুযায়ী হয় তবে আমি এর সুবিধা নিতে পারি)) এর অর্থ হ'ল প্রোগ্রামটি এরকম দেখাচ্ছে:

⊇+
⊇   Some subset of {standard input}
 +  sums to {the first command-line argument}

একটি সম্পূর্ণ প্রোগ্রাম হিসাবে, এটি একটি বুলিয়ান মান প্রদান করে; true.প্রোগ্রামে সমস্ত দাবি যদি একই সাথে সন্তুষ্ট হতে পারে, বা false.যদি তা নাও হতে পারে।

(একটি অনুস্মারক, বা যারা ইতিমধ্যে জানে না তাদের জন্য: ব্র্যাচল্যাগ 2 তার নিজস্ব অক্ষর এনকোডিং ব্যবহার করে যাতে একক বাইট দীর্ঘ)


আপনি বলেছিলেন যে Bra ব্র্যাচল্যাজে একটি একক বাইট, আপনি এখানে বাইটগুলি পেস্ট করবেন না কেন? আমি বাজি ধরছি এর কারণ আছে, আমি আগ্রহী, কিছুটা অক্ষর-এনকোডিং নব।
theonlygusti

1
এগুলি ডিস্কে এনকোড করা আছে 08 2B(আপনি এখানে এনকোডিংগুলি দেখতে পারেন )। আমি নির্দিষ্ট এনকোডিংয়ের তালিকা না দেওয়ার কারণটি এটি অপ্রাসঙ্গিক; যা সত্যিই গুরুত্বপূর্ণ তা হ'ল ব্র্যাচল্যাগ 256 টির বেশি অনন্য অক্ষর ব্যবহার করে না, যাতে প্রতিটিকে একটি বাইটে উপস্থাপন করা যায়। কোডটি আরও পঠনযোগ্য করে তোলার জন্য এটি সাধারণত গল্ফ ভাষা দ্বারা করা হয়; তারা পরিবর্তে কোড পৃষ্ঠা 437 এর মতো একটি এনকোডিং ব্যবহার করতে পারে তবে আপনি যদি এটি করেন তবে কেউ এটি পড়তে সক্ষম হবে না

10

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

æOså

ব্যাখ্যা:

æ      Calculate the powerset of the first input
 O     Sum each element
  s    Put the second input at the top of the stack
   å   Check whether the input is in the powerset sum.

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


দেখে মনে হচ্ছে আপনি আনুষ্ঠানিকভাবে সবাইকে তালিকাটি সংকুচিত করার জন্য বিভ্রান্ত করেছেন; পি
লিকি নুন

আপনি একবার আপনার সঙ্কুচিত তালিকাটি মুছে ফেলা এবং এটি ইনপুটটিতে সরিয়ে নিয়ে গেলে, আমি আমার উত্তরটি মুছে ফেলব (কারণ আমাদের উত্তরগুলি একই হবে)
Leaky Nun

এই সম্প্রদায়টি প্রতিভাতে পূর্ণ।
টবি

5

গণিত, 25 বাইট

!FreeQ[Tr/@Subsets@#,#2]&

বিশুদ্ধ ফাংশন প্রথম আর্গুমেন্ট এবং দ্বিতীয় আর্গুমেন্ট হিসাবে লক্ষ্য পূর্ণসংখ্যা, এবং ফিরে যেমন মুদ্রা মূল্যবোধের একটি অ্যারের গ্রহণ Trueবা False


4

জেলি, 6 বাইট

ŒPS€e@

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

লিকি নুনকে -2 বাইটস ধন্যবাদ
-13 বাইট ধন্যবাদ লিকি নুনকে (দীর্ঘ গল্প)



@ ল্যাকিয়ুন হেন, আরও একটি ভাল সমাধান আছে, সেখানে নেই।
হাইপারনিউট্রিনো

@ জোনাথান অ্যালান ওহ, ওফ! ধন্যবাদ!
হাইপারনিউটারিনো

একটি টিআইও লিঙ্ক যুক্ত করা হয়েছে;)
Okx

3

রেটিনা , 52 31 বাইট

\d+
$*
^((1+) |1+ )+(?<-2>\2)+$

এটি অনলাইন চেষ্টা করুন! পছন্দসই মান অনুসারে কয়েন এবং নোটগুলির স্থান-বিভাজিত তালিকা হিসাবে ইনপুট নেয়। সম্পাদনা করুন: আমার কোডটি ডিবাগ করেছেন এমন @ কোবিকে 18 টি বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা: প্রথম দুটি লাইন কেবল দশমিক থেকে আনারিতে রূপান্তরিত করে। তৃতীয় লাইনটি পরে কয়েন এবং নোটগুলির তালিকা ক্যাপচার করে। বিকল্পটি ইঞ্জিনটিকে ব্যাকট্র্যাক করার অনুমতি দেয় এবং নির্দিষ্ট মুদ্রা / নোটগুলি ক্যাপচার না করার জন্য চয়ন করে। ব্যালেন্সিং গোষ্ঠীটি ক্যাপচার তালিকার সমস্ত প্রত্যয়গুলির তুলনায় মানটির সাথে মেলে (অপ্রয়োজনীয় তবে গল্ফায়ার))


দ্বিতীয় বিকল্পটি কাজ করে না কারণ ইঞ্জিন 0-দৈর্ঘ্যের গ্রুপগুলিতে ব্যাক ট্র্যাক করে না (একটি বিরক্তিকর অপ্টিমাইজেশন)। আপনি ^((1+) )+(\2?(?<-2>)|){99}$(34 বাইট, মুদ্রার সংখ্যার সীমাবদ্ধতা সহ) বা ^((1+) |1+ )+(\2?(?<-2>))+$(এছাড়াও 34 বাইট) ব্যবহার করতে পারেন ।
কোবি

1
@ কোবি সুন্দরী! আমি উভয় উত্তর থেকে 2 বাইট সংরক্ষণ করেছি কারণ আমি সেই (?<-2>\2?)কাজটি ভুলে গিয়েছিলাম , এবং আপনার দ্বিতীয় উত্তর থেকে আরও একটি বাইট কারণ এটি ?আর দরকার নেই।
নীল


2

জাভা (ওপেনজেডিকে 8) , 125 বাইট

boolean f(int[]c,int n){int l=c.length;if(l<1)return n==0;int[]a=java.util.Arrays.copyOf(c,l-1);return f(a,n-c[l-1])|f(a,n);}

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


ল্যাম্বডায় এটি করা এটি আরও সংক্ষিপ্ত করে তুলতে পারে।
Okx

@ ওকএক্স এটি পুনরাবৃত্ত হয় (সুতরাং এটি আরও দীর্ঘ হবে), আমি লম্বডাসও করি না যদিও সেগুলি আরও কম হবে।
লিকি নুন

1
আপনি অ্যারে অনুলিপি করার প্রয়োজনটি সরানোর সাথে সাথে আপনার অ্যালগরিদমের পুনরাবৃত্ত সংস্করণটি আরও ছোট হবে: boolean f(int[]c,int n){for(int l=c.length;l-->0;n-=n<c[l]?0:c[l]);return n<1;}(by৯ বাইট) জাভা 8 এবং এর ল্যাম্বডাসের সাহায্যে এটি আরও 62 বাইটে কমে যেতে পারে। আপনার উত্তরটি বর্তমানে যেমন রয়েছে তেমন, int l=c.length-1তার lপরিবর্তে ব্যবহার l-1করাও ছোট।
অলিভিয়ের

2

প্রোলোগ (এসডাব্লুআই) , 46 বাইট

a([],0).
a([H|T],X):-Y is X-H,(a(T,Y);a(T,X)).

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

এর কাঁটাচামচ আমার পাইথন উত্তর


2
আপনি সম্ভবত পরিবর্তে গনুহ Prolog ব্যবহার করে 2 বাইট সংরক্ষণ (আপনি বানান করতে সক্ষম হবেন পারেন isহিসাবে #=, যা আপনি কিছু হোয়াইটস্পেস অপসারণ দিন হবে)।

2

জাভাস্ক্রিপ্ট (ES6), 81 69 67 64 বাইট

সিনক্র্যাক্সের কারিঙে মুদ্রার তালিকা cএবং লক্ষ্য পরিমাণ নিয়ে aযায় (c)(a)। রিটার্ন 0বা true

c=>g=(a,m=1)=>c.map((c,i)=>x-=c*(m>>i&1),x=a)&&!x||x-a&&g(a,m+1)

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


আপনি কয়েন তালিকা নিতে অনুমতি দেওয়া হয়?
লিকি নুন

@ লেকিউন "... এবং মুদ্রা / নোটের মানগুলির একটি তালিকা নিতে পারে ..."
মার্টিন এন্ডার

1
সুতরাং আমি কোনও কিছুর জন্য তালিকাটি এনকোড করে দিয়েছি ...
লিকি নুন

@ লেকিউন এটি দেখে মনে হচ্ছে
এডি হার্ট

2

হাস্কেল , 28 বাইট

অপারেটর ফাংশনটি (#)একটি পূর্ণসংখ্যার এবং পূর্ণসংখ্যার একটি তালিকা নেয় (বা আরও সাধারণভাবে Traversableসংখ্যার কোনও ধারক) এবং ফেরত দেয় a Bool

হিসাবে ব্যবহার করুন 6#[1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]

c#l=elem c$sum<$>mapM(:[0])l

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

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

  • cহ'ল কাঙ্ক্ষিত মান এবং lমুদ্রা মানগুলির তালিকা।
  • mapM(:[0])lপ্রতিটি মানকে 0 এর সাথে জোড় করে মানচিত্রগুলি তৈরি (:[0])করে lএবং তারপরে কার্তেসিয়ান পণ্য তৈরি করে, যেখানে প্রতিটি উপাদান হয় তার নিজস্ব মান হয় lবা 0 এর তালিকা প্রদান করে।
  • sum<$>প্রতিটি সংমিশ্রণের অঙ্ক করে, এবং ফলাফলের তালিকায় রয়েছে elem c$কিনা cতা পরীক্ষা করে ।

2

আর, 88 83 বাইট

-5 বাইটস @ জারকো ডাবল্ডামকে ধন্যবাদ

একটি বেনামী ফাংশন প্রদান করে। এটি মুদ্রার সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি করে ( expand.gridজোড়ায় জোড়ায় ব্যবহার করে T,F) এবং মান (গুলি) উপস্থিত কিনা তা পরীক্ষা করে। kআরবিতে cএকটি সংরক্ষিত শব্দ হওয়ায় মুদ্রাগুলি একসাথে একাধিক মান পরীক্ষা করতে পারে।

function(k,v)v%in%apply(expand.grid(Map(function(x)!0:1,k)),1,function(x)sum(k[x]))

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


আপনি এর c(T,F)দ্বারা !0:1এবং এর rep(list(!0:1),length(k))মাধ্যমে প্রতিস্থাপন করতে পারেনlapply(k,function(x)!0:1)
জেএডি

1
প্রকৃতপক্ষে, এটি তৈরি করুনMap(function(x)!0:1,k)
জেএডি

1

জাপট , 7 বাইট

à mx èN

এটি অনলাইন চেষ্টা করুন! 0মিথ্যা জন্য আউটপুট , সত্যের জন্য একটি ইতিবাচক পূর্ণসংখ্যার।

ব্যাখ্যা

à mx èN
          // Implicit: U = input array, V = input integer, N = array of all inputs
à         // Take all combinations of U.
  mx      // Map each combination to its sum.
     è    // Count the number of items in the result which also exist in
      N   //   the array of inputs.
          // This returns 0 if no combination sums to V, a positive integer otherwise.
          // Implicit: output result of last expression


1

রুবি , 39 বাইট

রিটার্নস nilfalsy মান, এবং তালিকা যে truthy যেমন নম্বর (সমস্ত নম্বর রুবি মধ্যে truthy হয়) তোলে আপ ক্ষুদ্রতম মুদ্রা মান হিসাবে।

f=->c,n{n!=0?c.find{|i|f[c-[i],n-i]}:1}

তবে সাবধান থাকুন যে এই অ্যালগরিদম O(C!)সময় জটিলতার সাথে অত্যন্ত ধীরে ধীরে , যেখানে Cমুদ্রার তালিকার দৈর্ঘ্য। শেষ পর্যন্ত এটি শেষ হয়ে যায়, তবে বেশিরভাগ পরীক্ষার কেস বেশিরভাগ অনলাইন দোভাষীকে শেষ করে দেয় f(UK_POUND, 5)

এখানে একটি 41-বাইট সংস্করণ যা একটি অতিরিক্ত সমাপ্তি শর্ত যুক্ত করে আরও দ্রুত শেষ করে এবং প্রকৃতপক্ষে সময় শেষ করা আরও শক্ত is

f=->c,n{n>0?c.find{|i|f[c-[i],n-i]}:n==0}

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


1

বাশ + জিএনইউ ইউটিলিটিস, 56 39

printf %$2s|egrep "^ {${1//,/\}? {}}?$"

কমা-বিচ্ছিন্ন তালিকা হিসাবে ইনপুট ডিনমিনেশন তালিকা (অরসেটেড) দেওয়া হয়। কমান্ড-লাইন পরামিতি হিসাবে ইনপুট তালিকা এবং মান দেওয়া হয়।

শেল রিটার্ন কোড আকারে আউটপুট দেওয়া। echo $?স্ক্রিপ্ট চালানোর পরে পরিদর্শন করুন । 0অর্থ সত্যবাদী, 1অর্থহীন।

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

  • printf %$2svalueস্পেসের একটি স্ট্রিং আউটপুট দেয়
  • "^ {${1//,/\}? {}}?$"হ'ল শেল সম্প্রসারণ যা ডিনমিনেশন তালিকাটি একটি রেজেেক্সের মতো প্রসারিত করে ^ {1}? {2}? {5}? {10}? ... $। দেখা গেছে যে egrepরেজেক্স ইঞ্জিন সঠিকভাবে এটির সাথে মিলে যাওয়ার জন্য যথেষ্ট স্মার্ট , ডোনমিনেশনগুলি যে আদেশে রয়েছে তা নির্বিশেষে
  • egrep স্পেসের স্ট্রিংটি রেজেক্সের সাথে মেলে কিনা তা পরীক্ষা করে

1

সি, 66 বাইট

m;v;f(n){for(m=1e5;m/=10;)for(v=5;n-=n<v*m?0:v*m,v/=2;);return!n;}

এটি এখানে কাজ দেখুন ।

সি, 53 বাইট

g(c,w,n)int*c;{for(;n-=n<c[--w]?0:c[w],w;);return!n;}

এই রূপটি মুদ্রার অ্যারে নেয়, যা এই সমস্যার উদ্দেশ্যটিকে পরাস্ত করে, কারণ এটি সাধারণ বিয়োগফলের দিকে নেমে আসে।

প্রথম যুক্তি মুদ্রার অ্যারে, দ্বিতীয়টি মুদ্রার গণনা, এবং তৃতীয়টি মান।

সি, 48 বাইট

g(c,n)int*c;{for(;n-=n<*c?0:*c,*++c;);return!n;}

পূর্বের বৈকল্পিকের বিকল্প এটি ধরে নিয়েছে যে মুদ্রার অ্যারেটি বিপরীত ও শূন্য হতে পারে।



0

সিজেম , 18 17 বাইট

q~_,2\m*\f.*::+#)

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

ব্যাখ্যা

q~                  e# Read and eval input.
  _,                e# Duplicate the money list and take its length.
    2\m*            e# Take the (length)th Cartesian power of [0 1].
        \f.*        e# Element-wise multiplication of each set of 0's and 1's with the money
                    e#   list. This is essentially the powerset, but with 0s instead of 
                    e#   missing elements.
            ::+     e# Sum each set.
               #    e# Find the index of the desired amount in the list. (-1 if not found)
                )   e# Increment. -1 => 0 (falsy), anything else => nonzero (truthy)



0

অক্টাভা, 39 বাইট

 @(L,n)any(cellfun(@sum,powerset(L))==n)

একটি অনামী ফাংশন যা প্রথম যুক্তি হিসাবে টার্গেট পূর্ণসংখ্যা এবং দ্বিতীয় তর্ক হিসাবে লক্ষ্য পূর্ণসংখ্যার হিসাবে নেয় এবং সত্য বা মিথ্যা প্রত্যাবর্তন করে।

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


0

গণিত, 42 বাইট

ListQ@NumberDecompose[#,Sort[#2,Greater]]&

ইনপুট

[15, {10,5}]

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