স্ব-সংযুক্ত সংখ্যা


12

একটি সংখ্যাকে অঙ্কের অঙ্কে রূপান্তর করুন

কোনও যোগফল নয়: আমাদের সংক্ষিপ্ত পরিমাণ প্রয়োজন
কোনও অঙ্ক নয়: আপনি কেবলমাত্র সংখ্যার অঙ্ক ব্যবহার করতে পারেন

উদাহরণ
আপনাকে ইনপুট হিসাবেপূর্ণসংখ্যাহিসাবে দেওয়া হবেn>0

বলা যাক n=27। আপনি প্রকাশ করার আছে 27হিসেবে সমষ্টি ব্যবহার শুধুমাত্র সংখ্যা [2,7] , এ সবচেয়ে কম পথ সম্ভব। আপনাকে প্রদত্ত সংখ্যার সমস্ত অঙ্ক ব্যবহার করতে হবে না!

তাই 27=2+2+2+7+7+7। আমরা তখন যারা সংখ্যা গ্রহণ করা এবং তাদের গণনা : [2,2,2,7,7,7]
জন্য ফাইনাল উত্তর n=27হল6

সংক্ষিপ্ত যোগফলn=195 পাওয়ার জন্য আরও একটি উদাহরণ আমাদের নীচের অঙ্কগুলি ব্যবহার করতে হবে: এবং উত্তরটি হ'ল
[5,5,5,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]23

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয়, এই সংখ্যা পর্যন্ত যোগফলের সর্বনিম্ন সংখ্যা ( সংখ্যায় অন্তর্ভুক্ত) n>0আউটপুট

পরীক্ষার কেস

Input->Output

1->1  
2->1  
10->10  
58->8  
874->110  
1259->142  
12347->1765  
123456->20576  
3456789->384088  

এটি .বাইটের মধ্যে সবচেয়ে ছোট উত্তর!


এমন কোনও সংখ্যা রয়েছে যা নিজের কাছে যোগ করতে পারে না / তারা কি ইনপুট হবে?
স্টিফেন

1
@ স্টেফেন তারা সবাই পারেন!

7
@ স্টিফেন কারন প্রতিটি সংখ্যা d_0 + 10 * d_1 + 100 * d_2 ইত্যাদি হিসাবে প্রকাশ করা যায় ...
জিওকাভেল

আমরা কি ইনপুটটিকে স্ট্রিং, চর-অ্যারে বা পূর্ণসংখ্যার অ্যারে হিসাবে নিতে পারি?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন স্ট্রিং ঠিক আছে। চর-অ্যারে বা পূর্ণসংখ্যার অ্যারে নয়।

উত্তর:


4

হুশ , 12 বাইট

Lḟo=⁰ΣṁΠḣ∞d⁰

দুটি অঙ্কের সংখ্যাগুলি বেশ দ্রুত পরিচালনা করে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

Lḟo=⁰ΣṁΠḣ∞d⁰  Input is n, say n = 13.
          d⁰  Digits of n: [1,3]
         ∞    Repeat infinitely: [[1,3],[1,3],[1,3],[1,3]...
        ḣ     Prefixes: [[],[[1,3]],[[1,3],[1,3]],[[1,3],[1,3],[1,3]],...
      ṁ       Map and concatenate
       Π      Cartesian product: [[],[1],[3],[1,1],[3,1],[1,3],[3,3],[1,1,1],[3,1,1],...
 ḟo           Find the first element
     Σ        whose sum
   =⁰         equals n: [3,3,3,3,1]
L             Return its length: 5

2

পাইথ , 12 বাইট

lef!-TsM`Q./

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

দুর্ভাগ্যক্রমে এটি মেমরির ত্রুটিগুলি তত বড় ইনপুটগুলিতে 58

ব্যাখ্যা

lef!-TsM`Q./
          ./    All lists of integers that sum to [the input]
  f             Filter for:
    -TsM`Q           Remove all occurrences of the digits in the input
   !                 Check if falsey (i.e. an empty list)
le              Length of the last occurrence, which is the shortest because all the
                filtered partitions share the same digit pool

আপনি একটি ব্যাখ্যা যোগ করতে আপত্তি হবে?
জোনা

@ জোনাঃ ব্যাখ্যা যুক্ত হয়েছে।
notjagan

1
ধন্যবাদ। আকর্ষণীয় যে পাইথের একটি আদিম রয়েছে যা মূলত সমস্যাটি সমাধান করে./
জোনা

12-বাইট বিকল্প: lef<.{TjQ;./(ফিল্টার - সঠিক উপসেট - ইনপুট এর অঙ্কগুলির)
মিঃ এক্সকোডার

2

গণিত, 78 বাইট

(t=1;While[(s=IntegerPartitions[x=#,t,IntegerDigits@x])=={},t++];Tr[1^#&@@s])&  

সর্বশেষ পরীক্ষার কেসটি 5 সেকেন্ডে সন্ধান করে


কিছুটা খাটো:Length@IntegerPartitions[#, All, Sort@DeleteCases[0]@IntegerDigits@#, 1][[1]] &
কুবা

2

আর , 78 বাইট

function(n){while(all(F-n)){F=outer(F,n%/%10^(0:nchar(n))%%10,"+")
T=T+1}
T-1}

এটি অনলাইন চেষ্টা করুন! (গল্ফ সংস্করণ)

খাঁটি ব্রুট ফোর্স অ্যালগরিদম, সুতরাং এটি আসলে সমস্ত পরীক্ষার কেস সমাধান করে না, এবং আমি মনে করি এটি শেষ পরীক্ষার ক্ষেত্রে 40,000 জিবি বরাদ্দ করার চেষ্টা করেছিল ...

Tআর ডিফল্টে 1তাই আমরা একটি অফ-ওয়ান ত্রুটি পাই যা আমরা রিটার্নের ধাপে সংশোধন করি তবে আমরা Fকোনটি খেলাপি খেলায় খেলাপি হয় তাও পাই 0

অবারিত ব্যাখ্যা:

function(n){
 d <- n%/%10^(0:nchar(n))%%10   # digit list with a 0 appended at end
 d <- unique(d[d>0])            # filter zeros (not technically necessary)
                                # and get unique digits
 x <- 0                         # storage for sums
 i <- 0                         # counter for number of sums done
 while(!any(x==n)){             # until we find a combination
  x <- outer(x,d,"+")           # take all sums of x and d, store as x
  i <- i + 1}                   # increment counter
i}                              # return counter

এটি অনলাইন চেষ্টা করুন! (কম গোল্ফ সংস্করণ)


2

পাইথন 2, 168 155 144 বাইট

এটি যতটা সংক্ষিপ্ত হতে পারে তা নয় , তবে এটি সেরা-প্রথম এবং সত্যিকারের খারাপ নয়, রানটাইম ওয়াইস।

n=input()
g=sorted(set(n)-{0})[::-1]
def h(k):
 if k<0:return
 if`k`in g:return 1
 for d in g:
  f=h(k-int(d))
  if f:return 1+f
print h(int(n)) 

filter(None...একটি অঙ্ক, যা আমি আমি যখন এই উপার্জন করতে পারে শিখেছি হিসাবে 0 কে সরানো।

সবচেয়ে বড় সমস্যাটি হচ্ছে পাইথন স্ট্যাক ফ্রেম, যা বাস্তবিকভাবে আমাকে এটিকে সবচেয়ে বড় ইনপুটগুলিতে চালাতে দেয় না। সুতরাং, এটি কোনও বৈধ সমাধান নয়, সত্যই, আমি পুনরাবৃত্তির সীমাটি বাড়িয়ে খেলেছি যা কেবল সেগ-ফল্টের দিকে নিয়ে গেছে। এটি হয় একটি লুপ এবং স্ট্যাক দিয়ে বা অজগরটিতে কাজ করার জন্য আরও অনেক চতুরতার সাথে কাজ করতে হবে।

সম্পাদনা করুন: 13 বাইটের জন্য কায়ারড এবং চ্যাস ব্রাউনকে ধন্যবাদ!


আপনি ব্যবহার করতে পারেন inputএবং ইনপুটটি উদ্ধৃতি সহ চারপাশে থাকা প্রয়োজন।
কেয়ারড কোইনরিঙ্গিংহিং

2
শারীরিক সীমাবদ্ধতার কারণে ব্যর্থ হওয়ার পক্ষে এটি পুরোপুরি গ্রহণযোগ্য, যতক্ষণ না এটি তত্ত্বে সাফল্য লাভ করে, যা এটি করে।
জোনাথন অ্যালান

9 টি বাইট প্রতিস্থাপনের filter(None,sorted(map(int,set(n)))[::-1])মাধ্যমে সংরক্ষণ করুন sorted(set(map(int,n))-{0})[::-1](যদিও বিষয়টিটি Noneজানতে পেরে জিনিসটি বেশ সুন্দর)।
চ্যাস ব্রাউন

@ চ্যাসব্রাউন বেশিরভাগ ক্ষেত্রে আপনি filter(len,...)তালিকা এবং স্ট্রিংয়ের filter(abs,...)জন্য এবং পূর্ণসংখ্যা এবং ভাসমানগুলির জন্য ব্যবহার করতে পারেন ।
ovs


0

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

f=(n,l=0,a=n,[c,...b]=a)=>n?1/c?Math.min(!+c|+c>n?1/0:f(n-c,l+1,a),f(n,l,b)):1/0:l
<input type=number oninput=o.textContent=f(this.value)><pre id=o>

স্ট্রিং হিসাবে ইনপুট নেয়।


আপনি কেন ব্যবহার করছেন তা ব্যাখ্যা করতে পারেন 1/0?
জাকারি

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

ওহ, বুঝতে পারি নি যে এটি পুনরাবৃত্তি হয়।
জাকারি

@ জাচারাý f=শুরুতে একটি বড় সূত্র, যেহেতু নন-ক্রিসিভ ল্যাম্বডাসের জন্য আপনার এটির দরকার নেই।
নীল

0

রুবি , 70 বাইট

->n{w,s=n.digits,0;s+=1while !w.product(*[w]*s).find{|x|x.sum==n};s+1}

খুব ধীরে ধীরে, কোনও সমাধান না পাওয়া পর্যন্ত আকার বাড়ানোর সম্ভাব্য সমস্ত সংমিশ্রণগুলি চেষ্টা করে দেখুন।

টিআইও-তে রুবি ২.৪-এর জন্য ডেনিসকে ধন্যবাদ।

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



0

পাইথন 2 , 183 176 172 166 161 বাইট

def f(n,D=0,p=0,b=0):
	D=D or set(map(int,`n`))-{0}
	d=min(D);c=0;D=D-{d}
	q=[p+n/d,b][n%d>0]
	while c<min(D or{0}):q=b=f(n-c*d,D,p+c,b);c+=1
	return[q,b][q>b>0]

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

অন্যান্য পাইথন উত্তরের চেয়ে দীর্ঘ, তবে 987654321টিআইও-তে এক সেকেন্ডের অধীনে সংযুক্ত সমস্ত পরীক্ষার কেসগুলি সম্পাদন করে ।

সত্য যে যদি সুবিধা নেয় d1<d2ডিজিটের হয়, তারপর সেখানে সর্বাধিক প্রয়োজন হবে d2-1 d1(যেহেতু সমষ্টি 's d2দৃষ্টান্ত d1দিয়ে প্রতিস্থাপিত হতে পারে d1দৃষ্টান্ত d2একটি সংক্ষিপ্ত সমষ্টি জন্য)। সুতরাং, অঙ্কগুলি আরোহণের ক্রম অনুসারে বাছাই করার জন্য, " 9! = 362880সম্ভাব্য পরিমাণগুলি বিবেচনা করার জন্য" কেবলমাত্র "রয়েছে" ; এবং সর্বাধিক পুনরাবৃত্তির গভীরতা 9(এর মান নির্বিশেষে n)


0

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

f n=[read[c]|c<-show n,c>'0']#n!!0
s#n|n>0,x:m<-(s#).(n-)=<<s=[1+minimum(x:m)]|1<3=[0|n==0]

এটি অনলাইন চেষ্টা করুন! ব্যবহারের উদাহরণ: f 58ফলন 8। দুই-অঙ্কের সংখ্যার জন্য দ্রুত, বড় ইনপুটগুলির জন্য ভয়ঙ্করভাবে ধীর slow

জিরোগুলি ফিল্টার করার সময় ফাংশনটি fইনপুট নম্বরটিকে nঅঙ্কের তালিকায় রূপান্তর করে । তারপরে এই তালিকাটি এবং nনিজেই (#)ফাংশনটি হস্তান্তর করা হবে, যা একটি সিঙ্গলটন তালিকা প্রদান করে। !!0এই সিঙ্গলটন তালিকার উপাদানটি প্রদান করে।

(#)বিকল্প প্রকার হিসাবে একক এবং খালি তালিকা ব্যবহার করে। এর একটি ইনপুট দেওয়া n=58এবং s=[5,8], যা এই ধারণার সমস্ত সংখ্যার বিয়োগ হয় sথেকে n, তারপর যাও recursively আবেদন (#)পরীক্ষক যা অঙ্ক প্লাস পদক্ষেপ এবং রিটার্ন এক নূন্যতম কত ফলস্বরূপ এই ন্যূনতম ঘটে। প্রথম অংশটি গণনা করা হয় (s#).(n-)=<<s, যা একই concat(map(s#)(map(n-)s))। সুতরাং আমাদের উদাহরণে প্রথমে [58-5,58-8]গণনা করা হয়, তার পরে বা পরে [[5,8]#53,[5,8]#50]ফলাফল আসে । তালিকায় কমপক্ষে একটি উপাদান রয়েছে কিনা তা নিশ্চিত করার জন্য ফলাফলটি প্যাটার্নের সাথে মিলেছে ( অন্যথায় ব্যর্থ হয়), তারপরে ফলাফলের সর্বাধিক ন্যূনতম 1 টির সিংগেলটন তালিকা আবার সংযুক্ত করা হবে। যদি[[7],[7]][7,7]concatx:mminimumnশূন্যের চেয়ে ছোট বা পুনরাবৃত্ত কলটি একটি খালি তালিকা ফিরিয়ে দিয়েছে, আমরা অনুসন্ধানের ব্যর্থ শাখায় রয়েছি এবং একটি খালি তালিকা ফিরে আসে। যদি n==0শাখাটি সফল হয় এবং [0]ফিরে আসে।


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

f n=[d|d<-[9,8..1],show d!!0`elem`show n]#n!!0
s@(d:r)#n|n>=d,[x]<-s#(n-d)=[x+1]|1<3=r#n
s#n=[0|n==0]

এটি অনলাইন চেষ্টা করুন! একটি উপায় আরও দক্ষ পদ্ধতির, সমস্ত পরীক্ষার কেস এক সেকেন্ডের নীচে পরীক্ষা করে।

এবার, ইনপুটটির অঙ্কগুলির তালিকাটি অবতরণ অনুসারে গণনা করা হবে, যা (#)যত দ্রুত সম্ভব বৃহত্তম অঙ্কটি ব্যবহার করার চেষ্টা করে, তারপরে দ্বিতীয় বৃহত্তম এবং কোনও সমাধান না পাওয়া পর্যন্ত। এইভাবে পাওয়া প্রথম সমাধানটি সবচেয়ে ছোট হওয়ার গ্যারান্টিযুক্ত।

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