মুদ্রা সমস্যা


20

পটভূমি

Golfenistan এর কাল্পনিক জাতি অফিসিয়াল মুদ্রা foo বিন্যাস , এবং কয়েন মাত্র তিন ধরনের আছে: 3 ফুগুলি, 7 ফুগুলি এবং 8 ফুগুলি। কেউ দেখতে পাবে যে এই মুদ্রাগুলি ব্যবহার করে 4 টি ফুওয়ের মতো নির্দিষ্ট পরিমাণে অর্থ প্রদান করা সম্ভব নয়। তবুও, সমস্ত বড় পরিমাণে গঠিত হতে পারে। আপনার কাজটি হ'ল মুদ্রা (এই ক্ষেত্রে 5 টি ফুস) দিয়ে তৈরি করা যায় না এমন সর্বাধিক পরিমাণ সন্ধান করা, যা মুদ্রার সমস্যা হিসাবে পরিচিত ।

ইনপুট

আপনার ইনপুটটি প্রচলিত মুদ্রার মানকে উপস্থাপন করে ধনাত্মক পূর্ণসংখ্যার একটি তালিকা । এটি সম্পর্কে দুটি জিনিস গ্যারান্টিযুক্ত:L = [n1, n2, ..., nk]

  • এর উপাদানগুলির GCD Lহ'ল 1।
  • L 1 নম্বর ধারণ করে না।

এটি অরসোর্টেড এবং / অথবা ডুপ্লিকেট থাকতে পারে (বিশেষ সংস্করণের কয়েন ভাবেন)।

আউটপুট

যেহেতু এর জিসিডি L1, তাই প্রতিটি বৃহত যথেষ্ট পূর্ণসংখ্যার mতার উপাদানগুলির একটি অ-নেতিবাচক লিনিয়ার সংমিশ্রণ হিসাবে প্রকাশ করা যেতে পারে; অন্য কথায়, আমাদের আছে

 m = a1*n1 + a2*n2 + ... + ak*nk 

কিছু পূর্ণসংখ্যার জন্য । আপনার আউটপুট বৃহত্তম পূর্ণসংখ্যা যে করতে পারবে না এই ফর্মটি প্রকাশ করা। একটি ইঙ্গিত হিসাবে, এটি পরিচিত যে আউটপুট সর্বদা কম হয় , যদি হয় এবং হয় ( রেফারেন্স ) এর সর্বাধিক এবং ন্যূনতম উপাদান ।ai ≥ 0(n1 - 1)*(nk - 1)n1nkL

বিধি

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

আমি এই চ্যালেঞ্জটি পোস্ট করার পরে, ব্যবহারকারী @ভিহান নির্দেশ করেছেন যে স্ট্যাক ওভারফ্লোতে একটি সঠিক নকল রয়েছেএই মেটা আলোচনার ভিত্তিতে , এই চ্যালেঞ্জটি সদৃশ হিসাবে মুছে ফেলা হবে না; তবে আমি জিজ্ঞাসা করছি যে এসও সংস্করণ অনুসারে সমস্ত উত্তরগুলির মূল উত্সগুলি দেওয়া উচিত, সম্প্রদায় উইকির মর্যাদা দেওয়া উচিত, এবং যদি মূল লেখক তাদের উত্তর এখানে পোস্ট করতে চান তবে মুছে ফেলা উচিত।

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

[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49

5
FrobeniusNumberম্যাথমেটিকায়
আলেফাল্ফ

3
এই কাগজে পাওয়া যায় এমন একটি উপায়ে আরও ভাল ওপেন বাউন্ড পাওয়া যায় (p - 1)(q - 1)যা উপরের সীমা হিসাবে প্রতিষ্ঠিত হয়, যেখানে pএবং qসেটের সবচেয়ে ছোট এবং বৃহত্তম উপাদান।
orlp

2
রান সময় বা মেমরি ব্যবহারের কোন সীমা আছে?
ডেনিস

1
স্ট্যাক ওভারফ্লোতে কিছুক্ষণ আগে এইরকম একটি কোড গল্ফের প্রশ্ন ছিল
ডাউনগোট

1
আমার কাছে একটি 13 বাইট পাইথ সলিউশন রয়েছে যা [2,3]যুক্তিসঙ্গত সময়ে এবং অন্য কিছু করতে পারে। [2,5]স্মৃতিতে প্রায় লক্ষ লক্ষ পাইথন তালিকা তৈরি করবে।
isaacg

উত্তর:


4

পাইথ, 23 বাইট

ef!fqTs.b*NYQY^UTlQS*FQ

এটি খুব ধীর, কারণ এটি সমস্ত মুদ্রার পণ্য পর্যন্ত সমস্ত মান পরীক্ষা করে। এখানে এমন একটি সংস্করণ যা প্রায় অভিন্ন, তবে 1) মুদ্রার সেটগুলিকে একে অপরের দ্বারা বিভাজ্য নয় এবং 2) কেবলমাত্র (max(coins) - 1) * (min(coins) - 1)(47 বাইট) পর্যন্ত মানগুলি পরীক্ষা করে :

=Qu?.A<LiHdG+GHGQYef!fqTs.b*NYQY^UTlQS*thSQteSQ

ব্যাখ্যা

                   S            range 1 to
                    *FQ         product of input
 f                             filter by
               UT                range 0 to T 
              ^  lQ              cartesian power by number of coins
   f                            filter by
      s.b*NYQY                   sum of coin values * amounts
    qT                           equals desired number T
  !                             nothing matching that filter
e                             take last (highest) element

8

পার্ল, 60 54 51 বাইট

50 বাইট কোড + 1 বাইট কমান্ড লাইন

$.*=$_,$r.=1x$_."|"}{$_=$.while(1x$.--)=~/^($r)+$/

গল্ফিং চালিয়ে যাবে এবং পরে একটি ব্যাখ্যা পোস্ট করবে। বেসিক পদ্ধতিরটি হ'ল রেজেক্স ইঞ্জিনটিকে স্ট্রিং ম্যাচিংয়ের সাথে কঠোর পরিশ্রম করতে দিন। উদাহরণস্বরূপ, এটি অনুরূপ একটি রেজেক্স তৈরি করবে ^(.{3})*(.{7})*(.{8})*$এবং nযেখানে দৈর্ঘ্যের একটি স্ট্রিংয়ের সাথে মেলেn ইনপুটগুলির উত্পাদন থেকে এটি মেলে ব্যর্থ না হওয়া অবধি নেমে আসে।

নোট করুন যে আর্গুমেন্টের সংখ্যা বাড়ার সাথে সাথে এটি তাত্পর্যপূর্ণভাবে ধীর হয়ে উঠবে।

ব্যবহার: যুক্তিগুলি STDIN (নতুন লাইন পৃথক) থেকে পড়া হয়, উদাহরণস্বরূপ:

printf "101\n10" | perl -p entry.pl

3

আর , 84 78 বাইট

কপিরাইটগুলির একটি স্বেচ্ছাসেবী প্রবেশের জন্য, একটি1,একটি2,..., ফ্রোবেনিয়াসের পরিমাণ দেওয়া হয়

a=scan();max((1:(b<-min(a)*max(a)))[-colSums(combn(outer(a,0:b),sum(!!a)))])

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

যেহেতু এটি সর্বদা চরমের পণ্যের চেয়ে ছোট একটিআমি's। এটি তখন এই সীমার মধ্যে সমস্ত সম্ভাব্য সংমিশ্রণগুলি (এবং আরও অনেকগুলি) একত্রিত করার বিষয়। কোল বেককে outer"*" না দিয়ে এবং colSums"প্রয়োগ (..., 2, যোগ) " না দিয়ে পরামর্শ দেওয়ার জন্য ধন্যবাদ ।

একটি দ্রুত তবে দীর্ঘ (দুটি বাইট দ্বারা) সংস্করণটি কেবল বিবেচনা করে max(a):

a=scan();max((1:(min(a)*(b<-max(a))))[-apply(combn(outer(a,0:b,"*"),sum(!!a)),2,sum)])

একজন সামান্য খাটো সংস্করণ (78 বাইট) যে প্রায়শই লগ ইন করুন খুব বা চালানো লাগে অত্যধিক স্থান এটি ব্যবহার করে দেখুন অনলাইন হয়

a=scan();max((1:(b<-prod(a)))[-apply(combn(outer(a,0:b,"*"),sum(!!a)),2,sum)])

1

পাইথন 2, 188 187 বাইট

def g(L):
 M=max(L);i=r=0;s=[0]*M;l=[1]+s[1:]
 while 1:
    if any(all((l+l)[o:o+min(L)])for o in range(M)):return~-s[r]*M+r
    if any(l[(i-a)%M]for a in L):l[i]=1
    else:r=i
    s[i]+=1;i=(i+1)%M

দ্বিতীয় ইন্ডেন্টেশনটি এসও-তে 4 টি স্পেস হিসাবে রেন্ডার করা হয়, সেগুলি ট্যাব হওয়া উচিত।

প্রকৃতপক্ষে একটি 'দ্রুত' সমাধান, ব্রুটফোর্স নয়, এখানে বর্ণিত হিসাবে 'উইল্ফের পদ্ধতি' ব্যবহার করে ।


1

জাভাস্ক্রিপ্ট ES6, 120 130 126 128 127 125 অক্ষর

f=a=>`${r=[1|a.sort((a,b)=>a-b)]}`.repeat(a[0]*a[a.length-1]).replace(/./g,(x,q)=>r[q]|a.map(x=>r[q+x]|=r[q])).lastIndexOf(0)

বিকল্প 126 অক্ষর সংস্করণ:

f=a=>{r=[1];a.sort((a,b)=>a-b);for(q=0;q<a[0]*a[a.length-1];++q)r[q]?a.map(x=>r[q+x]=1):r[q]=0;return r.join``.lastIndexOf(0)}

টেস্ট:

"[3, 7, 8] -> 5\n\
[25, 10, 16] -> 79\n\
[11, 12, 13, 14, 13, 14] -> 43\n\
[101, 10] -> 899\n\
[101, 10, 899] -> 889\n\
[101, 10, 11] -> 89\n\
[30, 105, 70, 42] -> 383\n\
[2, 51, 6] -> 49".replace(/(\[.*?\]) -> (\d+)/g, function (m, t, r) {
  return f(JSON.parse(t)) == r
})

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