একটি পয়সা সংরক্ষিত হয় একটি পয়সা


21

... সংখ্যাত!

আপনি আপনার প্রোগ্রামটি এমন একটি ভেরিয়েবল পাস করবেন যা ডলার এবং / অথবা সেন্টগুলিতে পরিমাণের অর্থ এবং মুদ্রা মানগুলির একটি অ্যারে উপস্থাপন করে। আপনার চ্যালেঞ্জটি হল মুদ্রার মানগুলির প্রদত্ত অ্যারেগুলির সংমিশ্রনের সংখ্যার আউটপুট দেওয়া যা কোডটিতে পাস হওয়া পরিমাণকে যোগ করবে। নামধারী কয়েনগুলি দিয়ে যদি এটি সম্ভব না হয় তবে প্রোগ্রামটি ফিরে আসা উচিত 0

আমেরিকান সংখ্যাতাত্ত্বিক পরিভাষায় নোট:

  • 1-শতাংশ মুদ্রা: পেনি
  • 5 শতাংশ মুদ্রা: নিকেল
  • 10 শতাংশ মুদ্রা: ডাইম
  • 25 শতাংশ মুদ্রা: চতুর্থাংশ (ত্রৈমাসিক ডলার)

উদাহরণ 1:

প্রোগ্রামটি পাস হয়েছে:

12, [1, 5, 10]

(12 সেন্ট)

আউটপুট:

4

12 সেন্ট উৎপাদনের জন্য নামযুক্ত মুদ্রাগুলির সংমিশ্রণের 4 টি সম্ভাব্য উপায় রয়েছে:

  1. 12 পেনি
  2. 1 নিকেল এবং 7 পেনি
  3. 2 নিকেল এবং 2 পেনি
  4. 1 ডাইম এবং 2 পেনি

উদাহরণ 2:

প্রোগ্রামটি পাস হয়েছে:

26, [1, 5, 10, 25]

(২ 26 সেন্ট)

আউটপুট:

13

26 সেন্টের উত্পাদনের জন্য নামযুক্ত কয়েনগুলির একত্রিত করার সম্ভাব্য 13 টি উপায় রয়েছে:

  1. 26 পেনি
  2. 21 পেনি এবং 1 নিকেল
  3. 16 পেনি এবং 2 নিকেল
  4. 11 পেনি এবং 3 নিকেল
  5. 6 পেনি এবং 4 নিকেল
  6. 1 পয়সা এবং 5 নিকেল
  7. 16 পেনি এবং 1 ডাইম
  8. 6 পেনি এবং 2 ডাইমস
  9. 11 পেনি, 1 ডাইম এবং 1 নিকেল
  10. 6 পেনি, 1 ডাইম এবং 2 নিকেল
  11. 1 পেনি, 1 ডাইম এবং 3 টি নিকেলস
  12. 1 পেনি, 2 ডাইমস এবং 1 টি নিকেল
  13. 1 কোয়ার্টার এবং 1 পেনি

উদাহরণ 3:

প্রোগ্রামটি পাস হয়েছে:

19, [2, 7, 12]

আউটপুট:

2

19 সেন্টের উত্পাদনের জন্য নামযুক্ত মুদ্রাগুলির সংমিশ্রণের 2 টি সম্ভাব্য উপায় রয়েছে:

  1. 1 12-শতাংশ মুদ্রা এবং 1 7-শতাংশ মুদ্রা
  2. 1 7-শতাংশ মুদ্রা এবং 6 2-শতাংশ মুদ্রা

উদাহরণ 4:

প্রোগ্রামটি পাস হয়েছে:

13, [2, 8, 25]

আউটপুট:

0

13 সেন্ট উত্পাদনের জন্য নামযুক্ত কয়েনগুলির একত্রিত করার কোনও সম্ভাব্য উপায় নেই।


এটি স্যান্ডবক্সের মাধ্যমে হয়েছে। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। এটি কোড গল্ফ, সুতরাং কয়েকটি বাইটের সাথে উত্তর জিতল।


1
s / গণনা / উপার্জন
mbomb007

4
@ চার বাইট জন্য mbomb007: s/count/earn
wizzwizz4

5
আমার এবং আমি অনুমান করি যে অন্যান্য লোকেরা যারা ডলারের সাথে অর্থ প্রদান করে না তারা নিকেল এবং একটি ডাইম কী তা স্পষ্ট নয়। এটি নির্ধারণ করা কঠিন ছিল না, তবে আপনি এটি আরও কিছুটা আন্তর্জাতিক লিখতে পারেন?
ক্রিজেজিৎজ

2
@Kritzefitz। আমি এটি প্রশ্নের সাথে যুক্ত করেছি।
ট্রিগ

2
@ জেপফো: যদিও মুদ্রা-ও-ফাইলগুলি একমত হতে পারে তবে আমাকে একমত হতে হবে না। একটি পয়সা এমন এক মানক মুদ্রা যার মান এক শতাংশ থাকে। পঁচাশি সেন্ট এক টাকার পরিমাণ। চুয়ান্ন পেনি স্পষ্টভাবে চৌদ্দ চারটি মুদ্রা। এটিকে একটি "এক শতাংশের মুদ্রা" বা (সরকারীভাবে) "এক শতাংশের টুকরা "ও বলা হয়। আমি এমন কোনও আনুষ্ঠানিক সেটিংয়ের কথা ভাবতে পারি না যেখানে "পেনি" শব্দটি গ্রহণযোগ্য হবে না। এই লোকগুলি , যারা বিশেষত মুদ্রা সংগ্রহের বিষয়ে রয়েছেন, তাদের এটিকে "পয়সা" বলার কোনও সমস্যা নেই।
মাইকেলস

উত্তর:


12

জেলি ( কাঁটাচামচ ), 2 বাইট

æf

এটি জেলির একটি শাখার উপর নির্ভর করে যেখানে আমি ফ্রোবেনিয়াস সমাধানের পরমাণু বাস্তবায়নে কাজ করছি তাই দুর্ভাগ্যক্রমে আপনি এটি অনলাইনে চেষ্টা করতে পারবেন না।

ব্যবহার

$ ./jelly eun 'æf' '12' '[1,5,10]'
4
$ ./jelly eun 'æf' '26' '[1,5,10,25]'
13
$ ./jelly eun 'æf' '19' '[2,7,12]'
2
$ ./jelly eun 'æf' '13' '[2,8,25]'
0

ব্যাখ্যা

æf  Input: total T, denominations D
æf  Frobenius count, determines the number of solutions
    of nonnegative X such that X dot-product D = T

10
... এটি এমনকি ন্যায্য নয়।
ইটিএইচ প্রডাকশন

... এবং আমি বাজি ধরছি এটি আরও দ্রুত!
জোনাথন অ্যালান

18

হাস্কেল, 37 34 বাইট

s#l@(c:d)|s>=c=(s-c)#l+s#d
s#_=0^s

ব্যবহারের উদাহরণ: 26 # [1,5,10,25]-> 13

সাধারণ পুনরাবৃত্তির পদ্ধতি: তালিকার পরবর্তী সংখ্যা উভয়ই চেষ্টা করুন (যতক্ষণ না এটি পরিমাণের তুলনায় কম বা সমান) এবং এড়িয়ে যান। যদি সংখ্যাটি বিয়োগ করে শূন্যের পরিমাণের দিকে নিয়ে যায় 1তবে অন্যথায় নিন (বা তালিকাটি উপাদানগুলির বাইরে চলে গেলে) নিন একটি 0। যারা 1এস এবং 0এস যোগ।

সম্পাদনা করুন: @ ড্যামিয়েন: পুনরাবৃত্তির জন্য সংক্ষিপ্ত বেস কেসটি নির্দেশ করে 3 বাইট সংরক্ষণ করেছে (যা @ এক্সনরের উত্তরেও পাওয়া যাবে )।


s # l @ (c: d) | s> = c = (sc) # l + s # d; s # _ = 0 ^ s
ড্যামিয়েন

এবং 1209 [1,5,10,33,48] এবং 6000 [1,5,10,33] এর ফলাফল কী হবে তাই আমি আমার কোডটি ক্যালিব্রেট করতে পারি
RosLuP

@ রসলুপি: 1209 # [1,5,10,33,48]-> 1314050
নিমি

@ নিমিমি ঠিক আছে 1314050 এর জন্য আমার এখানেও একই ফলাফল রয়েছে ... ধন্যবাদ ...
রোজলুপ

@ রসলুপি: ... 537 মিনিট পরে: 6000 # [1,5,10,33]-> 22086484
নিমি

15

গণিত, 35 22 বাইট

FrobeniusSolve13 বাইট প্রস্তাব এবং সংরক্ষণের জন্য মাইলগুলি ধন্যবাদ ।

Length@*FrobeniusSolve

একটি নামবিহীন ফাংশনকে মূল্যায়ন করে যা প্রথম যুক্তি হিসাবে মুদ্রার তালিকা এবং দ্বিতীয় হিসাবে লক্ষ্য মান নিয়ে যায়। FrobeniusSolveফর্মের ডায়োফান্টাইন সমীকরণগুলি সমাধান করার জন্য একটি শর্টহ্যান্ড

a1x1 + a2x2 + ... + anxn = b

জন্য অ নেতিবাচক পূর্ণসংখ্যার উপর এবং আমাদের সব সমস্যার সমাধান দেয়।xi


@ রোসলুপি এটি চালানোর জন্য আপনার গাণিতিকের অ্যাক্সেস প্রয়োজন। এটি এটি একটি বেনাম ফাংশন তাই এটি কল করার জন্য, হয় এটি বন্ধনীতে সজ্জিত করুন বা এটি একটি ভেরিয়েবলের মধ্যে সঞ্চয় করুন। উদাহরণস্বরূপ(Length@*FrobeniusSolve)[{1, 7, 9}, 18]
মাইল

এবং 1209 [1,5,10,33,48] এবং 6000 [1,5,10,33] এর ফলাফল কী হবে তাই আমি আমার কোডটি ক্যালিব্রেট করতে পারি
RosLuP

@ রোসলুপি যথাক্রমে 1314050 এবং 22086484।
মার্টিন ইন্ডার

ঠিক আছে এখানে ফলাফল একই, ধন্যবাদ ...
RosLuP

এর জন্য ১ votes টি ভোট কেবলমাত্র ন্যায়সঙ্গত হলেই প্রোগ্রামার যে দৈর্ঘ্য @ * ফ্রোবিনিয়াস
সলভ

12

পাইথ, 8 বাইট

/sM{yS*E

কাঁচা ব্রুট ফোর্স, প্রকৃত পরীক্ষার জন্য নিবিড় মেমরি। এটি ও (2 এমএন ), যেখানে এন হল মুদ্রার সংখ্যা এবং এম হ'ল লক্ষ্যফলের যোগফল। হিসাবে ইনপুট লাগে target\n[c,o,i,n,s]

/sM{yS*EQQ      (implicit Q's)
      *EQ       multiply coin list by target
     S          sort
    y           powerset (all subsequences)
   {            remove duplicates
 sM             sum all results
/        Q      count correct sums

9

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

s%(h:t)=sum$map(%t)[s,s-h..0]
s%_=0^s

প্রথম মুদ্রার কয়েকটি ব্যবহার করে hহ্রাসপ্রাপ্ত sঅগ্রগতিতে একটি অ-নেতিবাচক মানের জন্য প্রয়োজনীয় পরিমাণ হ্রাস পায় [s,s-h..0], যা পরে অবশিষ্ট কয়েনগুলি দিয়ে তৈরি করা আবশ্যক। সেখানে একবার কোন কয়েন ছেড়ে চেক যে সমষ্টি শূন্য arithmetically হিসাবে 0^s


আপনি বিস্মৃত হলেন আপনি কীভাবে @nimi হিসাবে ভিন্ন পন্থা ব্যবহার করে ঠিক একই বাইট গণনাটিকে আঘাত করেছেন।
ক্রিজ্জেফিটজ

9

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

f=(n,a,[c,...b]=a)=>n?n>0&&c?f(n-c,a)+f(n,b):0:1

কোনও ক্রমে মুদ্রা গ্রহণ করে। প্রথম মুদ্রাটি ব্যবহার এবং না ব্যবহার উভয়ের চেষ্টা করে, যেকোন উপায়ে পুনরাবৃত্তভাবে সংমিশ্রণের সংখ্যা গণনা করা। n==0একটি মিলে যাওয়া সংমিশ্রণের n<0অর্থ, কয়েনগুলি পরিমাণ ছাড়িয়ে যায় তবে c==undefinedকোনও কয়েন অবশিষ্ট নেই। নোট করুন যে ফাংশনটি খুব ধীর এবং আপনার যদি একটি পয়সা মুদ্রা থাকে তবে নিম্নলিখিত ফাংশনটি দ্রুত হয় (মুদ্রার অ্যারেতে পেনি মুদ্রাটি পাস করবেন না):

f=(n,a,[c,...b]=a)=>c?(c<=n&&f(n-c,a))+f(n,b):1

...ধূর. বাস্তব সুন্দর ধারণা।
ETH প্রোডাকশনগুলি

এবং 1209 [1,5,10,33,48] এবং 6000 [1,5,10,33] এর ফলাফল কী হবে তাই আমি আমার কোডটি ক্যালিব্রেট করতে পারি
RosLuP

@ রসলুপি প্রদত্ত কোডটি আপনার প্রথম উদাহরণের জন্য শেষ পর্যন্ত 1314050 ফেরত দেয়। আমার দোভাষী দ্বিতীয় উদাহরণটি মূল্যায়নের জন্য প্রয়োজনীয় পুনরাবৃত্তি পরিচালনা করতে পারবেন না।
নিল

@ রোসলুপি আমি অতিরিক্ত পয়সা মুদ্রা বিদ্যমান রয়েছে ধরে নিতে ফাংশনটি সংশোধন করেছি এবং এটি 620 [5,10,33] এর জন্য 22086484 ফিরে এসেছে।
নিল

@ নীল ঠিক আছে 22086484 6000 [1,5,10,33] এর জন্য ... পরিবর্তে এখানে 11239 হবে 6000 [5,10,33] এর জন্য (আপনি যে অ্যারে লিখেছেন)
রোজলুপি

7

পার্ল, 45 বাইট

বাইট গণনাতে 44 বাইট কোড এবং -pপতাকা রয়েছে।

s%\S+%(1{$&})*%g,(1x<>)=~/^$_$(?{$\++})^/x}{

প্রথম লাইনে মুদ্রার মান এবং দ্বিতীয় লাইনে লক্ষ্যযুক্ত পরিমাণ নেয়:

$ perl -pE 's%\S+%(1{$&})*%g,(1x<>)=~/^$_$(?{$\++})^/x}{' <<< "1 5 10 25
26"
13

সংক্ষিপ্ত ব্যাখ্যা:

-p                        # Set $_ to the value of the input, 
                          # and adds a print at the end of the code.
s%\S+%(1{$&})*%g,         # Converts each number n to (1{$&})* (to prepare the regex)
                          # This pattern does half the job.
(1x<>)                    # Converts the target to unary representation.
  =~                      # Match against.. (regex)
    /^ $_ $               # $_ contains the pattern we prepared with the first line.
     (?{$\++})            # Count the number of successful matches
     ^                    # Forces a fail in the regex since the begining can't be matched here.
    /x                    # Ignore white-spaces in the regex 
                          # (needed since the available coins are space-separated)
 }{                       # End the code block to avoid the input being printed (because of -p flag) 
                          # The print will still be executed, but $_ will be empty, 
                          # and only $\ will be printed (this variable is added after every print)

6

জেলি , 10 9 বাইট

œċЀS€€Fċ

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

কিভাবে?

œċЀS€€Fċ - Main link: coins, target
  Ѐ      - map over right argument, or for each n in [1,2,...,target]
œċ        - combinations with replacement, possible choices of each of n coins
    S€€   - sum for each for each (values of those selections)
       F  - flatten into one list
        ċ - count occurrences of right argument

2
অর্থ সংক্রান্ত প্রশ্নে অনেকগুলি ইউরো-চিহ্ন ব্যবহার করার জন্য +1।
স্টেইনবার্গ

6

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

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),0):1

কয়েনগুলি সর্বোচ্চ থেকে নিম্নতম পর্যন্ত ইনপুট হয়, যেমন f(26,[100,25,10,5,1])। আপনার যদি একটি পয়সা থাকে, এটি সরিয়ে ফেলুন এবং এর পরিবর্তে এটি আরও দ্রুত সংস্করণটি ব্যবহার করুন:

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),1):1

এটি @ নিমির মতো একটি পুনরাবৃত্ত সূত্র ব্যবহার করে। আমি প্রাথমিকভাবে এটি কয়েক দিন আগে লিখেছিলাম যখন চ্যালেঞ্জটি এখনও স্যান্ডবক্সে ছিল; এটি দেখতে এরকম দেখাচ্ছে:

f=(n,c=[100,25,10,5])=>n?c.reduce((x,y,i)=>y>n?x:x+f(n-y,c.slice(i)),1):1

কেবলমাত্র পার্থক্যগুলি c(এটির মূল চ্যালেঞ্জের একটি সেট মান ছিল) এর ডিফল্ট মান হওয়ায় এবং ফাংশনটির 0মধ্যে পরিবর্তন (এটি ছিল দুটি বাইট সংক্ষিপ্ত এবং এর চেয়ে এক হাজার কোটি গতিবেগ দ্রুত )।.reduce1c=[100,25,10,5,1]


এখানে একটি সংশোধিত সংস্করণ রয়েছে যা সংমিশ্রণের সংখ্যার চেয়ে সমস্ত সংমিশ্রণকে ছাড়িয়ে যায়:

f=(n,c)=>n?c.reduce((x,y,i)=>y>n?x:[...x,...f(n-y,c.slice(i)).map(c=>[...c,y])],[]):[[]]

এবং 1209 [1,5,10,33,48] এবং 6000 [1,5,10,33] এর ফলাফল কী হবে তাই আমি আমার কোডটি ক্যালিব্রেট করতে পারি
RosLuP

@ রসলুপ আমি যথাক্রমে ১৩১৪০৫০ (৫ মিনিটের পরে) এবং একটি স্ট্যাক ওভারফ্লো (এক ঘন্টা পরে) পাই get আমি সবেমাত্র যুক্ত করা দ্রুত সংস্করণ সহ, আমি কয়েক সেকেন্ডের মধ্যে 1314050 এবং 22086484 পেয়েছি।
ইটিএইচ প্রডাকশনগুলি

আমার পুরানো পেন্টিয়াম 2.8Gh কম্পিউটারের সাথে প্রথম ফলাফলের জন্য 6 সেকেন্ড, দ্বিতীয় 5 মিনিটের জন্য + বা -
রোজলুপি


5

অ্যাক্সিয়োম, 63 62 বাইট

@ জোনাথান অ্যালান দ্বারা 1 টি বাইট সংরক্ষণ করা হয়েছে

f(n,l)==coefficient(series(reduce(*,[1/(1-x^i)for i in l])),n)

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

প্রথমবার এই ফাংশনটিকে বলা হয় এটি একটি ভয়াবহ সতর্কতা দেয়, তবে এখনও সঠিক ফলাফল দেয়। এর পরে, তালিকাটি খালি না হওয়া পর্যন্ত সবকিছু ঠিক আছে।


1
আমি অ্যাক্সিয়োমকে চিনি না - এর আগে forকি স্থানটি সরিয়ে নেওয়া সম্ভব ?
জোনাথন অ্যালান

1
@ জোনাথন অ্যালান হ্যাঁ, এটি! ভাল গল্ফিং প্রবৃত্তি, ধন্যবাদ!
খ্রিস্টান সিভর্স

5

আর, 81 76 63 বাইট

13 বাইট দূরে গল্ফ করার জন্য @ আর্টারনবুলকে ধন্যবাদ!

function(u,v)sum(t(t(expand.grid(lapply(u/v,seq,f=0))))%*%v==u)

উদাহরণ (নোট করুন যে c(...)আপনি কীভাবে মানগুলির ভেক্টরগুলিকে আর-তে পাঠাবেন):

f(12,c(1,5,10))
[1] 4

ব্যাখ্যা:

uহ'ল কাঙ্ক্ষিত মান, vমুদ্রা মানগুলির ভেক্টর।

expand.grid(lapply(u/v,seq,from=0))

0 থেকে কে কয়েনের প্রতিটি সম্ভাব্য সংমিশ্রণের সাথে ডেটা ফ্রেম তৈরি করে (কে ডিনামিনেশনের উপর নির্ভর করে), যেখানে কে সর্বনিম্ন যে কেয়েনের সেই মুদ্রার মান কমপক্ষে ইউ (অর্জনের মান) হয়।

সাধারণত আমরা as.matrixএটিকে ম্যাট্রিক্সে পরিণত করতে ব্যবহার করব তবে এটি অনেকগুলি অক্ষর। পরিবর্তে আমরা ট্রান্সপোজ (!) এর ট্রান্সপোজটি গ্রহণ করি যা স্বয়ংক্রিয়ভাবে এটিকে জোর করে, তবে কম অক্ষর নেয়।

%*% vতারপরে প্রতিটি সারির আর্থিক মান গণনা করে। শেষ ধাপে গণনা কিভাবে যারা মান অনেক আকাঙ্ক্ষিত মান সমান হয় u

নোট করুন যে এর গণ্য জটিলতা এবং মেমরির প্রয়োজনীয়তাগুলি হ'ল ভয়ঙ্কর তবে ওহে, এটি কোড গল্ফ।


1
ভাল ব্যবহার expand.grid! এবং আমি t(t())কৌশলটি ভালবাসি । যেহেতু আপনার ফাংশনটিতে কেবল একটি একক লাইন কোড জড়িত, তাই আপনি 2 বাইট সংরক্ষণ করে আপনার কোঁকড়া ধনুর্বন্ধনী মুছে ফেলতে পারেন। এছাড়াও, আপনি do.call(expand.grid,lapply(u/v,seq,from=0))কেবল expand.grid(lapply(u/v,seq,f=0))11 বাইট সংরক্ষণ করে স্যুইচ করতে পারেন ।
rturnbull

তাদের জন্য ধন্যবাদ! আমি কখনই বুঝতে পারি নি expand.gridইনপুট হিসাবে কোনও তালিকা নেবে। এটি লজ্জার বিষয় যা ":"অ-পূর্ণসংখ্যার সাথে ভালভাবে কাজ করে না অন্যথায় আরও দু'জনকে lapply(u/v,":",0)বাঁচাতে পারত।
জেডিএল

do.call(x,y)হিসাবে একই x(y), তাই কি ধরণের ইনপুট গ্রহণ করা হয় তা সম্পর্কে নয়। আপনি যদি সত্যিই ব্যবহার করতে চান তবে :আমি মনে করি আপনি ব্যবহার করতে পারেন lapply(u%/%v,`:`,0)তবে এটি একই বাইট গণনা।
rturnbull

1
" ---" do.call(x,y)এর সমান হ'ল x(y)কেবল --- যদি yএকটি তালিকা না হয় তবে এটি এই ক্ষেত্রে রয়েছে। যদিও আপনার দ্বিতীয় বিষয়টিতে একমত হন।
জেডিএল

3

জে, 27 বাইট

1#.[=](+/ .*~]#:,@i.)1+<.@%

ব্যবহার

   f =: 1#.[=](+/ .*~]#:,@i.)1+<.@%
   12 f 1 5 10
4
   26 f 1 5 10 25
13
   19 f 2 7 12
2
   13 f 2 8 25
0

ব্যাখ্যা

1#.[=](+/ .*~]#:,@i.)1+<.@%  Input: target T (LHS), denominations D (RHS)
                          %  Divide T by each in D
                       <.@   Floor each
                             These are the maximum number of each denomination
                     1+      Add 1 to each, call these B
                ,@i.         Forms the range 0 the the product of B
             ]               Get B
              #:             Convert each in the range to mixed radix B
     ]                       Get D
       +/ .*~                Dot product between D and each mixed radix number
                             These are all combinations of denominations up to T
   [                         Get T
    =                        Test if each sum is equal to T
1#.                          Convert as base 1 digits to decimal (takes the sum)
                             This is the number of times each sum was true

জে এত দুর্দান্ত, তবুও এত উন্মাদ
CommaToast

2

টিএসকিউএল, 105 বাইট

এই 4 টি মুদ্রার ধরণের সাহায্যে এটি কেবল এক ডলার পর্যন্ত পরিচালনা করতে পারে। অবরুদ্ধ সংস্করণটি প্রায় 4 ডলার পর্যন্ত পরিচালনা করতে পারে তবে খুব ধীর - আমার বাক্সে এটি 27 সেকেন্ড সময় নেয়। ফলাফল 10045 কম্বিনেশন বিটিডব্লিউ

Golfed:

DECLARE @ INT = 100
DECLARE @t table(z int)
INSERT @t values(1),(5),(10),(25)
;WITH c as(SELECT 0l,0s UNION ALL SELECT z,s+z FROM c,@t WHERE l<=z and s<@)SELECT SUM(1)FROM c WHERE s=@

Ungolfed:

-- input variables
DECLARE @ INT = 100
DECLARE @t table(z int)
INSERT @t values(1),(5),(10),(25)

-- query
;WITH c as
(
  SELECT 0l,0s
  UNION ALL
  SELECT z,s+z
  FROM c,@t
  WHERE l<=z and s<@
)
SELECT SUM(1)
FROM c
WHERE s=@
-- to allow more than 100 recursions(amounts higher than 1 dollar in this example)
OPTION(MAXRECURSION 0)

বেহালা


2

tinylisp repl, 66 বাইট

(d C(q((Q V)(i Q(i(l Q 0)0(i V(s(C(s Q(h V))V)(s 0(C Q(t V))))0))1

পুনরাবৃত্তির সমাধান: প্রথম মুদ্রা ব্যবহার করার চেষ্টা করে এবং প্রথম মুদ্রা ব্যবহার না করার চেষ্টা করে, তারপরে প্রতিটি থেকে ফলাফল যুক্ত হয়। ক্ষতিকারক সময় জটিলতা এবং কোনও পুচ্ছ-পুনরাবৃত্তি নয়, তবে এটি পরীক্ষার কেসগুলি ঠিক জরিমানা করে।

অবহেলিত (বিল্টিনগুলির কী: d= সংজ্ঞায়িত, q= উদ্ধৃতি, i= যদি, l= কম-থেকে, s= বিয়োগ, h= মাথা, t= লেজ):

(d combos
 (q
  ((amount coin-values)
   (i amount
    (i (l amount 0)
     0
     (i coin-values
      (s
       (combos
        (s amount (h coin-values))
        coin-values)
       (s
        0
        (combos
         amount
         (t coin-values))))
      0))
    1))))

ব্যবহারের উদাহরণ:

tl> (d C(q((Q V)(i Q(i(l Q 0)0(i V(s(C(s Q(h V))V)(s 0(C Q(t V))))0))1
C
tl> (C 12 (q (1 5 10)))
4
tl> (C 26 (q (1 5 10 25)))
13
tl> (C 19 (q (2 7 12)))
2
tl> (C 13 (q (2 8 25)))
0
tl> (C 400 (q (1 5 10 25)))
Error: recursion depth exceeded. How could you forget to use tail calls?!

1

পিএইচপি, 130 বাইট

function r($n,$a){if($c=$a[0])for(;0<$n;$n-=$c)$o+=r($n,array_slice($a,1));return$o?:$n==0;}echo r($argv[1],array_slice($argv,2));

99 বাইট রিকার্সিভ ফাংশন (এবং এটি কল করার 31 বাইট) যা বার বার লক্ষ্যমাত্রা থেকে বর্তমান মুদ্রার মান সরিয়ে দেয় এবং নতুন মান এবং অন্যান্য মুদ্রার সাথে নিজেকে কল করে। লক্ষ্যটি 0 বার পৌঁছানোর সংখ্যা গণনা করে। এর মতো চালান:

 php -r "function r($n,$a){if($c=$a[0])for(;0<$n;$n-=$c)$o+=r($n,array_slice($a,1));return$o?:$n==0;}echo r($argv[1],array_slice($argv,2));" 12 1 5 10

যদি 97 টিরও বেশি মুদ্রার বিভিন্ন ধরণের সাথে ডাকা হয় তবে এটি কোনও কিছু না ফিরিয়েই একটি পুনরাবৃত্তির মৃত্যুর সাথে মরতে পারে তবে এটি মুদ্রার চেয়েও অনেক বেশি প্রকারের, তবে আমাদের এটি ঠিকঠাক সমর্থন করতে হবে।
ব্যবহারকারী59178

1

র‌্যাকেট 275 বাইট

(set! l(flatten(for/list((i l))(for/list((j(floor(/ s i))))i))))(define oll'())(for((i(range 1(add1(floor(/ s(apply min l)))))))
(define ol(combinations l i))(for((j ol))(set! j(sort j >))(when(and(= s(apply + j))(not(ormap(λ(x)(equal? x j))oll)))(set! oll(cons j oll)))))oll

Ungolfed:

(define(f s l)
  (set! l              ; have list contain all possible coins that can be used
        (flatten
         (for/list ((i l))
           (for/list ((j              
                       (floor
                        (/ s i))))
             i))))
  (define oll '())                    ; final list of all solutions initialized
  (for ((i (range 1  
                  (add1
                   (floor             ; for different sizes of coin-set
                    (/ s
                       (apply min l)))))))
    (define ol (combinations l i))          ; get a list of all combinations
    (for ((j ol))                           ; test each combination
      (set! j (sort j >))
      (when (and
             (= s (apply + j))              ; sum is correct
             (not(ormap                     ; solution is not already in list
                  (lambda(x)
                    (equal? x j))
                  oll)))
        (set! oll (cons j oll))             ; add found solution to final list
        )))
  (reverse oll))

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

(f 4 '[1 2])
(println "-------------")
(f 12 '[1 5 10])
(println "-------------")
(f 19 '[2 7 12])
(println "-------------")
(f 8 '(1 2 3))

আউটপুট:

'((2 2) (2 1 1) (1 1 1 1))
"-------------"
'((10 1 1) (5 5 1 1) (5 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1))
"-------------"
'((12 7) (7 2 2 2 2 2 2))
"-------------"
'((3 3 2) (2 2 2 2) (3 2 2 1) (3 3 1 1) (2 2 2 1 1) (3 2 1 1 1) (2 2 1 1 1 1) (3 1 1 1 1 1) (2 1 1 1 1 1 1) (1 1 1 1 1 1 1 1))

নিম্নলিখিত পুনরাবৃত্ত সমাধানে কিছু ত্রুটি রয়েছে:

(define (f s l)                      ; s is sum needed; l is list of coin-types
  (set! l (sort l >))
  (define oll '())                   ; list of all solution lists
  (let loop ((l l)   
             (ol '()))               ; a solution list initialized
    (when (not (null? l))
        (set! ol (cons (first l) ol)))
    (define ols (apply + ol))        ; current sum in solution list
    (cond
      [(null? l) (remove-duplicates oll)]
      [(= ols s) (set! oll (cons ol oll))
                 (loop (rest l) '()) 
                 ]
      [(> ols s) (loop (rest l) (rest ol))
                 (loop (rest l) '())   
                 ]
      [(< ols s) (loop l ol) 
                 (loop (rest l) ol)
                 ])))

এর জন্য সঠিকভাবে কাজ করে না:

(f 8 '[1 2 3])

আউটপুট:

'((1 1 1 2 3) (1 2 2 3) (1 1 1 1 1 1 1 1) (2 3 3) (1 1 1 1 1 1 2) (1 1 1 1 2 2) (1 1 2 2 2) (2 2 2 2))

(1 1 3 3) সম্ভব তবে সমাধান তালিকায় আসে না।


আমি কোলাহল সাথে পরিচিত না, কিন্তু আমি কয়েক বছর আগে যে ব্যবহার করেছেন এই একটি অনুরূপ সমস্যার জন্য Clojure মধ্যে একটি সমাধান কি লিখবেন এমনreduce
মাইল

'কমান' বেস র্যাকেট ভাষার অংশ নয়, যদিও 'ভাঁজ' উপলব্ধ। আগের সমাধানটিতে কিছু ত্রুটি আছে বলে আমি উপরে একটি সংশোধিত সমাধান যুক্ত করেছি।
rnso

দেখে মনে হচ্ছে লিস্প উত্সাহীদের একগুচ্ছ একত্রিত হয়ে গেছে ... এবং একটি র‌্যাকেট তৈরি করেছে
জো

1
পাতার মর্মর উত্সাহীদের কিছু প্রথমে একটি তৈরি Scheme( groups.csail.mit.edu/mac/projects/scheme করার জন্য) অবশেষে নেতৃত্বে পূর্ণবিকশিত Racket( racket-lang.org , stackoverflow.com/questions/3345397/... )!
rnso

1

জেলি , 15 বাইট

s+\Fṁḷ
2*BW;ç/Ṫ

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন।

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

ব্যাখ্যা

s+\Fṁḷ  Helper link. Input: solutions S, coin C
s       Slice the solutions into non-overlapping sublists of length C
 +\     Cumulative sum
   F    Flatten
     ḷ  Left, get S
    ṁ   Mold the sums to the shape of S

2*BW;ç/Ṫ  Main link. Input: target T, denominations D
2*        Compute 2^T
  B       Convert to binary, creates a list with 1 followed by T-1 0's
          These are the number of solutions for each value from 0 to T
          starting with no coins used
   W      Wrap it inside another array
    ;     Concatenate with D
     ç/   Reduce using the helper link
       Ṫ  Tail, return the last value which is the solution

1

আসলে , 15 বাইট

গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

╗;R`╜∙♂S╔♂Σi`Mc

Ungolfing

         Implicit input n, then the list of coins a.
╗        Save a to register 0.
;R       Duplicate n and create a range [1..n] from that duplicate.
`...`M   Map the following function over that range. Variable i.
  ╜        Push a from register 0.
  ∙        Push the i-th Cartesian power of a.
  ♂S       Sort each member of car_pow.
  ╔        Uniquify car_pow so we don't count too any duplicate coin arrangements.
  ♂Σ       Take the sum of each coin arrangement.
  i        Flatten the list.
c        Using the result of the map and the remaining n, push map.count(n).
         Implicit return.

0

পাইথন, 120 বাইট

from itertools import*
lambda t,L:[sum(map(lambda x,y:x*y,C,L))-t for C in product(range(t+1),repeat=len(L))].count(0)

লক্ষ্যমাত্রা অর্জনের লক্ষ্যে কয়েনের সমস্ত সংমিশ্রণের মাধ্যমে ব্রুটোফোর্স (এমনকি ক্ষুদ্রতমটি 1 না হলেও)।

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