কোনও নির্দিষ্ট সংখ্যায় কাউন্টারকে এগিয়ে নিয়ে যাওয়ার সবচেয়ে সংক্ষিপ্ততম উপায়টি সন্ধান করুন


10

আমার একটি কাউন্টার আছে এটি একটি ছোট ডিভাইস যা দেখতে দেখতে এটি:

বিপরীত

প্রদর্শন থেকে যায় 0000থেকে 9999। এটিতে শীর্ষে একটি সামান্য পুশ-বোতাম রয়েছে যা গণনাটি 1 দ্বারা বাড়িয়ে তোলে এবং ডানদিকে কিছুটা নক করুন যার উদ্দেশ্য কাউন্টারটিকে 0 এ পুনরায় সেট করা।

এখন, ছোট্ট গিঁটের বিষয়টি হ'ল আপনি যদি এটিকে পিছনের দিকে ঘুরিয়ে দেন, আপনি একবার এটিকে আবার সামনের দিকে ঘুরিয়ে দেওয়ার পরে আপনি চান এমন কোনও সংখ্যা বাড়িয়ে তুলতে পারেন। সুতরাং যদি আমি কাউন্টার বোতামটি 10 ​​বার টিপতাম যাতে কাউন্টারটি দেখায় 0010, আমি কোনও ছোট ক্লিক শুনতে পারা পর্যন্ত আমি গিঁটটি পিছনের দিকে ঘুরিয়ে দিতে পারি, তারপরে আবার এটিকে সামনে ঘুরিয়ে এটিকে সোজা দিকে যেতে বাধ্য করব 0090

তবে, নোকটি সর্বদা সংখ্যার সামনে এগিয়ে যাওয়ার সময় সমান সংখ্যার সমস্ত উপস্থিতি সর্বদা 1 দ্বারা বাড়িয়ে তুলবে। সুতরাং যদি কাউন্টারটি দেখায় 6060, আপনি কেবল এটিকে বাড়িয়ে তুলতে পারেন 7070, না 6070বা না 7060। এছাড়াও, গিঁটটি বহন 9না 0করেই গড়িয়ে 0990যাবে , সুতরাং 0000পরিবর্তে 1000বা এর পরিবর্তে অগ্রসর হবে 1100


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

তোমার প্রোগ্রাম ইনপুট হিসাবে থেকে একটি 4 ডিজিটের সংখ্যা নিতে হবে 0000থেকে 9999, এবং নিম্নলিখিত বিন্যাসে পদক্ষেপ একটি সিরিজ ফিরে

> 0001
C
> 0093
C12345678C12345678CCC
> 1000
C12345678C12345678C12345678C12345678C12345678C12345678C12345678C
> 9999
012345678

যেখানে C"কাউন্টার বোতাম টিপুন" এবং D0 থেকে 9 এর যে কোনও অঙ্কের অর্থ " D1 দ্বারা সমস্ত ঘটনা এগিয়ে যাওয়ার জন্য নকটি ব্যবহার করুন "।

আপনার প্রোগ্রামে সমস্ত সম্ভাব্য চার-অঙ্কের সংমিশ্রণের জন্য পদক্ষেপের একটি বৈধ ক্রম অবশ্যই তৈরি করতে হবে এবং সমস্ত 10,000 মামলার জন্য প্রয়োজনীয় পদক্ষেপের সংখ্যার দ্বারা স্কোর করা হবে। টাইয়ের ক্ষেত্রে (যখন সম্ভবত সর্বোত্তম অ্যালগরিদম পাওয়া যায়), সংক্ষিপ্ত কোডটি জয়ী হবে।


আপনি যদি গিঁটটি সামনে ঘুরিয়ে দেন তবে কী হবে? এটি কি এই ক্ষেত্রে পরিণত 0010হবে 0020? অথবা আপনি কেবল গিরিটি পিছনের দিকে ঘুরিয়ে দিতে পারেন? এবং এছাড়াও, প্রতিটি "ডি" গিঁটের অগ্রযাত্রার সংখ্যাকে "ডি" হিসাবে গণনা করে (উদাহরণস্বরূপ, 1234567গিঁটটি 1 বার, তারপরে 2 বার, তারপরে 3 বার, আবার কি তাই ঘোরে)? অথবা এটি কেবল প্রতিটি পৃথক গিঁট ঘুরিয়ে বোঝায় (উদাহরণস্বরূপ, 12345677 বার গিঁটানো মানে কি)?
আর কাপ,

উপরের মত মনে হচ্ছে এবং নীচেরটি সম্পর্কিত নয়।
ফাঁস নুন

গিঁট এমনকি নীচে অঙ্কগুলি চয়ন করতে পারেন।
ফাঁস নুন

গিঁটটি এগিয়ে নিয়ে যাওয়া হয় 0010 থেকে 0020 বা 1111 অগ্রসর হবে, নকিয়া ইতিমধ্যে যে অবস্থানে রয়েছে তার উপর নির্ভর করে আপনি গিঁটটিকে তার অবস্থানটি সেট করতে পিছনের দিকে ঘুরিয়ে রাখুন এবং তারপরে অঙ্কগুলি অগ্রিম করার জন্য এগিয়ে যান।
জো জেড।

1
সিরিয়াসলি, এই লোকটির সঠিক মূল্য হিসাবে তার পাল্টা প্রয়োজন !!!! এখন !!!
ক্যালকুলেটরফ্লাইন

উত্তর:


5

লুয়া, 327763 পদক্ষেপ (সর্বোত্তম, 276 বাইট)

গল্ফ সংস্করণ:

a={[0]=""}t=tonumber for i=0,52 do A={}for k,v in pairs(a)do A[k]=v L=("%04d"):format(k)for i=1,4 do c=L:sub(i,i)d=L:gsub(c,(t(c)+1)%10)e=a[t(d)]A[d]=(not e or #e>#v)and v..c or e end b=k+1 if k<9999then e=a[b]A[b]=(not e or #e>#v)and v.."C"or e end end a=A endprint(a[(...)])

প্রশ্নের উদাহরণগুলির উন্নত সংস্করণ (কেবলমাত্র 1000উন্নত):

0001:C
0093:CCCCCCCCCC12345678CCC
1000:0CCCCCCCCCCC2345678C23456789
     (0000>1111>1122>1199>1200>1000)
9999:012345678

অবরুদ্ধ সংস্করণ:

a = {[0]=""}
for i=0,52 do
    A = {}
    for k,v in pairs(a) do
        A[k] = v
        L=("%04d"):format(k)
        for i=1,4 do
           c=L:sub(i,i)
           d=L:gsub(c,(tonumber(c)+1)%10)
           e=a[tonumber(d)]
           A[d] = (not e or #e > #v) and v..c or e
        end
        b=k+1
        if k < 9999 then
            e=a[b]
            A[b] = (not e or #e > #v) and v.."C" or e
        end
    end
    a=A
end
print(a[93],a[1000],a[9999])

1

গণিত, স্কোর 512710

Unprotect[StringRepeat]
StringRepeat[x_String, 0]:=""
Protect[StringRepeat]
#<>StringRepeat["C",#3-#2*1111]&[Array[ToString@#&,#,0],##]&[If[#<10^3,0,Quotient[#,1111]],#]&

এর সাথে একটি বাগ সংশোধন StringRepeatকরে (এর জন্য ভুল আচরণ করে StringRepeat[x_String,0])


সেখানে কোনও স্থান থাকার দরকার আছে StringRepeat[x_String, 0]:=""?
বিড়াল 18

না, তবে আমি এটিকে সরাতে খুব অলস ছিলাম। এটা কি একটা সমস্যা?
ক্যালকুলেটরফলাইন

মোটেও নয়: পি এটি আমার কাছে কৌতূহল ছিল যে একটি সাদা জায়গা ছাড়া বাকী কোডটি গল্ফ হয় ।
বিড়াল 19

... যেটা হয় golfed, ডান? নাকি ম্যাথামেটিকায় নতুন লাইনের আওয়াজ?
বিড়াল 19


1

পাইথ, 327763 পদক্ষেপ (সর্বোত্তম, ১৩০ বাইট)

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

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

=Y.d((0k;V53=ZYFGY XZG=k@YG=N%"%04d"GV4=b@NH=di:Nb%"%d"ehibTT XZd.x?>l@Ydlk+kb@Yd+kb)=bhGI<G9999 XZb.x?>l@Yblk+k\C@Yb+k\C))=YZ;@YQ

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

=Y.d((0k;V53=ZYFGY XZG=k@YG=N%"%04d"GV4=b@NH=di:Nb%"%d"ehibTT XZd.x?>l@Ydlk+kb@Yd+kb)=bhGI<G9999 XZb.x?>l@Yblk+k\C@Yb+k\C))=YZ)@YQ
                  assign_copy('Q',eval_input())
=Y.d((0k;         assign_copy('Y',dict(0=k))
V53               for N in range(0,53):
=ZY                   assign_copy('Z',Y)
FGY                   for G in num_to_range(Y):
 XZG=k@YG                 no_print(Z[G] = assign_copy('k',lookup(Y,G)))
=N%"%04d"G                assign_copy('N',format("%04d",G))
V4                        for H in range(0,4):
=b@NH                         assign_copy('b',lookup(N,H))
=di:Nb%"%d"ehibTT             assign_copy('d',base(replace(N,b,format("%d",mod10(increment(base(b,10))))),10))
 XZd.x?>l@Ydlk+kb@Yd+kb       no_print(Z[d]=try_and_catch(greater_than(Plen(lookup(Y,d)),Plen(k)) ? concat(k,b) : lookup(Y,d)), lambda:plus(k,b))
)                         <anti-indent>
=bhG                      assign_copy('b',head(G))
I<G9999                   if less_than(G,9999):
 XZb.x?>l@Yblk+k\C@Yb+k\C     no_print(Z[b]=try_and_catch(greater_than(Plen(lookup(Y,b)),Plen(k)) ? concat(k,"C") : lookup(Y,b)), lambda:plus(k,"C"))
)                         <anti-indent>
)                     <anti-indent>
=YZ                   assign('Y',Z)
)                 <anti-indent>
@YQ               print(lookup(Y,Q))

কেবল লক্ষণীয়: লুয়া নীচে রয়েছে। : পি তবে এটি আশ্চর্যজনক, ভাল কাজ।
আর

এখনও আমার পক্ষে উপরে: ও
লিকি নুন

আমি সক্রিয় অনুসারে বাছাই করি, সম্ভবত আপনার ভোট আছে। তবে এটা আসলে কিছু যায় আসে না।
আর

ওহ এটি এখন আমার পক্ষে নীচে
লিকি নুন

1

জাভাস্ক্রিপ্ট (ES6), 327763 পদক্ষেপ (সর্বোত্তম, 184 বাইট)

একটি প্রস্থ প্রথম অনুসন্ধান, এত স্মার্ট নয় এবং এত দ্রুত নয়।

t=>eval("for(k=[],s=[['0000',i='']];[u,p]=s[i++],u-t;k[v=(1+u-~0+'').slice(-4)]=k[v]||s.push([v,p+'C']))[...u].map(x=>k[v=[...u].map(y=>x-y?y:-~x%10).join``]=k[v]||s.push([v,p+x]));p")

কম গল্ফড

t=>{
  k=[]; // mark values already found to reduce search
  for( i=0, s=[['0000','']]; 
       [u,p]=s[i++], // u: current code, p:current steps
       u != t; // exit if target found
     )
  {
     // try all digits present in current code
     [...u].map(x=> {
       v=[...u].map(y=>x-y?y:-~x%10).join`` // apply digit x to u
       if (!k[v]) // check if value v not found already
          k[v] = s.push([v,p+x]));
     })
     v=(1+u-~0+'').slice(-4); // try operator C
     if (!k[v]) // check if value v not found already
       k[v] = s.push([v,p+'C']))
  }
  return p
}

পরীক্ষা

f=t=>eval("for(k=[],s=[['0000',i='']];[u,p]=s[i++],u-t;k[v=(1+u-~0+'').slice(-4)]=k[v]||s.push([v,p+'C']))[...u].map(x=>k[v=[...u].map(y=>x-y?y:-~x%10).join``]=k[v]||s.push([v,p+x]));p")

function SingleTest()
{
  var i=S.value
  if (/^\d{4}$/.test(i)) X.value=f(i)
  else X.value='invalid input'
}  

SingleTest()

function LongTest()
{
  var i=0,v,r,t=0
  
  var step=_=>{ 
    v = ('000'+i).slice(-4);
    r = f(v);
    t+= r.length    
    V.value = v;
    R.value = r;
    T.value = t;
    ++i;
    if(i<10000) setTimeout(step, 0)
  }  
  
  step()
}
#V,#T,#S { width:5em }
#R,#X { width: 25em }
Single Test <input id=S value='0093'><button onclick="SingleTest()">-></button><input readonly id=X><hr>
Long test (0000 ... 9999) <button onclick="LongTest()">Go</button>(i mean <i>long</i>, runtime 1 hour)<br>
<input readonly id=V>
<input readonly id=R> 
Total steps:<input readonly id=T>

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