সংখ্যাগুলির রেস


16

আপনার এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা পৃথক এক-অঙ্কের ধনাত্মক পূর্ণসংখ্যার শুরুর ক্রম এবং ট্র্যাকের দৈর্ঘ্যকে ইনপুট আউটপুট হিসাবে দেয় বা সংখ্যার ফিনিস অর্ডার দেয়।

ইনপুট [5,1,2,6,7] and 14নিম্নলিখিত বর্ণটিকে সংজ্ঞায়িত করে:

--------------
76215 ->
--------------

দৌড় নিয়ম

  • ট্র্যাকটি চারপাশে মোড়ানো এবং অঙ্কগুলি একাধিক কোলে যেতে পারে।
  • পদক্ষেপের ক্রমটি চক্রযুক্ত এবং শুরুর অবস্থানের ভিত্তিতে। আমাদের উদাহরণে 5 1 2 6 7 5 1 2 ...
  • একই পজিশনে একাধিক সংখ্যা থাকতে পারে না।
  • প্রতিটি digit_valueঅঙ্কে প্রতি ধাপে ঘরের একটি গতি থাকে। একটি অঙ্ক ছাড়িয়ে যাওয়া বা অঙ্কের অবিচ্ছিন্ন অবরুদ্ধকরণের জন্য একটি অতিরিক্ত পদক্ষেপ ব্যয় হয়। অঙ্কটির যদি এর জন্য প্রয়োজনীয় গতি না থাকে তবে এটি অঙ্ক (অঙ্ক) এর আগে বন্ধ হয়ে যাবে। উদাহরণ:

    [41   ] => [ 1 4 ]  4 overtakes 1
    
    [2 1  ] => [ 21  ]  2 can only move 1 as it can't move 3 to overtake 1
    
    [4 12 ] => [ 412 ]  4 can only move 1 as it can't move 5 to overtake 12     
    
    [   3 ] => [ 3   ]  3 starting a new lap
    
  • প্রতিটি অঙ্ক digit_valueশেষ হওয়ার আগেই কোলে যেতে হয় । ট্র্যাকের শেষ কক্ষটি ছেড়ে গেলে একটি কোল শেষ হয়। একটি সমাপ্ত অঙ্কটি ট্র্যাক থেকে সরানো হয়েছে।

  • নোট করুন যে কোনও অঙ্কটি কোনও পদক্ষেপের মাধ্যমে একাধিকবার তার শুরুতে পৌঁছতে পারে এবং একাধিক ল্যাপগুলি সম্পূর্ণ করতে পারে complete

ইনপুট

  • 1..9কমপক্ষে একটি উপাদান এবং একক ধনাত্মক পূর্ণসংখ্যা সহ স্বতন্ত্র এক-অঙ্কের ধনাত্মক পূর্ণসংখ্যার ( ) তালিকা, তালিকার দৈর্ঘ্য, ট্র্যাকের দৈর্ঘ্যের চেয়ে বেশি।

আউটপুট

  • তারা যে কোনও দ্ব্যর্থহীন বিন্যাসে শেষ হয়েছে ক্রমের অঙ্কগুলির একটি তালিকা।

উদাহরণ

ইনপুটটির জন্য একটি ভিজ্যুয়াল ধাপে ধাপে উদাহরণ starting_order = [5,9,2] and length = 6

295   | Start position
29   5| digit 5 moves
2  9 5| digit 9 moves, finishing lap #1
  29 5| digit 2 moves
 529  | digit 5 moves, finishing lap #1
 52  9| digit 9 moves, finishing lap #2
 5  29| digit 2 moves
   529| digit 5 moves
 9 52 | digit 9 moves, finishing laps #3 and #4
29 5  | digit 2 moves, finishing lap #1
29   5| digit 5 moves
2  9 5| digit 9 moves, finishing lap #5
  29 5| digit 2 moves
 529  | digit 5 moves, finishing lap #2
 52  9| digit 9 moves, finishing lap #6
 5  29| digit 2 moves
   529| digit 5 moves
 9 52 | digit 9 moves, finishing laps #7 and #8
 9 5  | digit 2 moves, finishing lap #2 --> remove 2 from the track
59    | digit 5 moves, finishing lap #3
5     | digit 9 moves, finishing lap #9 --> remove 9 from the track
     5| digit 5 moves
    5 | digit 5 moves, finishing lap #4
      | digit 5 moves, finishing lap #5 --> remove 5 from the track
------
Finish order: 2 9 5

ফর্ম্যাট উদাহরণ Input => Output

[3], 2  =>  [3]

[9, 5], 3  =>  [9, 5]

[5, 9, 2], 6  =>  [2, 9, 5]

[5, 9, 2], 10  =>  [5, 9, 2]

[5, 7, 8, 1, 2], 10  =>  [1, 5, 7, 8, 2]

[5, 1, 6, 8, 3, 2], 17  =>  [1, 6, 8, 2, 3, 5]

[1, 2, 3, 7, 8, 9], 15  =>  [1, 7, 8, 9, 2, 3]

[9, 8, 7, 3, 2, 1], 15  =>  [8, 7, 9, 1, 2, 3]

[1, 2, 3, 4, 5, 6, 7, 8, 9], 20  =>  [1, 2, 3, 4, 5, 6, 7, 8, 9]

[9, 8, 7, 6, 5, 4, 3, 2, 1], 20  =>  [8, 7, 5, 9, 6, 1, 2, 4, 3]

এটি কোড-গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিততে পারে।


সম্ভবত, ইনপুট অ্যারেতে সদৃশ উপাদান থাকতে পারে না? এটি সেভাবে দেখায়, তবে আমি শর্তটি স্পষ্টভাবে বর্ণিত দেখতে পাই না।
অ্যান্ড্রু

@ অ্যান্ড্রু হ্যাঁ, কোনও সদৃশ অঙ্ক থাকতে পারে না। প্রশ্ন সম্পাদনা। ধন্যবাদ।
এলোমেলো

পরীক্ষার ক্ষেত্রে # 6 (দৈর্ঘ্য = 17) এর জন্য আমি কিছুটা আলাদা ফলাফল পেয়েছি (শেষ দুটি সংখ্যা বিপরীত)। আমি ভাবছিলাম আমার ভুলটা কোথায়? আমার জাতি লগ এই । আপনি কি দয়া করে আপনার সরবরাহ করতে পারেন যাতে আমি পৃথক হয়ে আমার ভুলটি খুঁজে পেতে পারি?
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf লগ পার্থক্য এখানে। 1 টি শেষ হওয়ার পরে আপনি যেখানে ছড়িয়ে দিয়ে শুরু করেন সেখানে 6 দিয়ে চলে যান। (নোট করুন আমার লগে ট্র্যাক থেকে সরানোর আগে অঙ্কগুলি রয়েছে এবং এটি আপনার নয় don't)
এলোমেলো

উত্তর:


3

রুবি 229 236

এটি এমন একটি ফাংশন যা দুটি পরামিতি নেয়: অঙ্কগুলি উপস্থাপন করে এমন একটি অ্যারে এবং ট্র্যাকের দৈর্ঘ্যের প্রতিনিধিত্বকারী একটি অ্যারি। অঙ্কগুলি রেসটি শেষ করে এমন ক্রমের প্রতিনিধিত্ব করে এটি একটি অ্যারে প্রদান করে।

F=->d,l{
i=0
t=d.map{|x|[x,d.size-(i+=1)]}
r=[]
d.cycle.map{|n|
t==[]&&break
(c=t.find{|x,_|x==n})&&(s=n
w=c[1]
o=p
(a=(t-[c]).map{|_,p|p%l}
s-=1;w+=1
a&[w%l]==[]?(o=p;c[1]=w):o||s-=o=1)while s>0
c[1]>=n*l&&(t.delete c;r<<n))}
r}

এটি অনলাইনে পরীক্ষা করুন: http://ideone.com/KyX5Yu

সম্পাদনা করুন: আরও কিছু অক্ষর সংরক্ষণের জন্য কিছু কৌশল বের করা হয়েছে ।

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

F=->digits,length{
  digit_positions = digits.map.with_index{|d,i|[d,digits.size-i-1] }

  result = []

  digits.cycle.map{|n|
    break if digit_positions==[]
    crt = digit_positions.find{|x,_|x==n}
    next unless crt

    steps_left = n
    pos = crt[1]
    taking_over = false

    while steps_left > 0
      other_pos = (digit_positions-[crt]).map{|_,p|p%length}

      steps_left-=1
      pos += 1

      if other_pos.include? (pos%length)
        steps_left -= 1 unless taking_over
        taking_over = true
      else
        taking_over = false
        crt[1] = pos
      end
    end

    if crt[1] >= n*length
      digit_positions.delete(crt)
      result<<n
    end
  }
  result
}

2

পাইথন 2, 345 বাইট

খুব খারাপ এটি @ w0lf এর চেয়ে সংক্ষিপ্ত নয়, তবে whetv। (মনে রাখবেন যে বড় ইনডেন্টগুলি ট্যাবগুলি থাকে, যা আমি পোস্ট করার সময় 4-স্পেসে অনুবাদ করে))

def r(o,l):
 n=len(o);s,t,a,d=dict(zip(o,range(n)[::-1])),-1,{_:0 for _ in o},[]     
 while len(s):
    t+=1;g=o[t%n]
    if g in d:continue
    y,k=s[g],1;i=z=w=0
    for _ in[0]*g:
     i+=1;m=y+i;e,p=m%l,m/l
     if-~a[g]+w>=g<d>m>=l:a[g]+=1;del s[g];d+=[g];break
     if e in s.values()and e!=y:i-=k;k=0
     else:k,s[g],(w,z)=1,e,[(w,z),(z,p)][z<p]
    a[g]+=z
 print d

0

এই আমার যাদু প্যাড কোড

সি (457 430b)

int v(int*M,int m){
int i,n,c,d,e=32,f=48,u=0,g=10,h,k,r,l=m,j;char a,*b=&a,*B,V[m];
for (i=0;u<m*m*m;i=(++u%m),*B=*b=(u<=l)?*b:e,b=B=&a)
printf("%c%c",0*(V[i]=(u<l?u>=(r=l-sizeof(M)/4)?M[u-r]+f:e:V[i])),((((V[c=(((V[i]=u<l?e:V[i])-f)/10<u/m)?j>=0&h<i|((h=(j=strchr(V+((k=(m+(d=(i-(V[i]-f)%g+1)))%m)),e)-V)<0?(int)(strchr(V,e)-V):(int)j)>=k)*(k>i)?h:m :m])=((V[c]==e)?(*(b=V+i)+(d<0)*g):V[c])))-f)%11==0?(*(B=V+c)-f)%g+f:0);
getch();
}

দ্রষ্টব্য : এর আরও উন্নতি প্রয়োজন ...

সম্পাদনা: কোডটি সংক্ষিপ্ত ... - আকার (ইনট) = 4, ফাংশন = ভি, এখনও করার পরিবর্তে কিছু পরিবর্তনশীল রয়ে গেছে।


আমার সিটি মরিচা, তবে সেই কলগুলি sizeofমনে হচ্ছে যেন তারা কোনও যাদু নম্বর দ্বারা প্রতিস্থাপিত হতে পারে। হতে পারে এটি পোর্টেবল হিসাবে না হবে, তবে ওহে - এটি কোড গল্ফ।
ডিএলস্ক 6:55

আপনার কোডটি 457 টি নয়, 457 টি দীর্ঘ বলে মনে হচ্ছে Also এছাড়াও, আমি মনে করি আপনি অপ্রয়োজনীয় সাদা স্থান সরিয়ে ফাংশনটিকে একটি ছোট নাম দিয়ে আরও সংক্ষিপ্ত করতে পারেন।
ক্রিশ্চিয়ান লুপাস্কু

প্রস্তাবগুলির জন্য ভাল ধন্যবাদ, তবে আমার জন্য গুরুত্বপূর্ণ বিষয়, আমি পুরো জিনিসটি দুটি ফাংশনে প্যাক করতে পেরেছি, লুপ এবং প্রিন্টফের জন্য, আমি একমাত্র ত্রুটিযুক্ত, প্রোগ্রামটি শূন্যের পরিবর্তে খালি অক্ষর মুদ্রণ করে চলেছে। তবে জাতি এখনও ঠিকমতো শেষ হয় যদি আমরা সেই পুরুষত্বহীন শূন্যতার অঙ্কগুলি ছুঁড়ে ফেলি
Abr001am

আইরিক ভেরিয়েবলগুলি ডিফল্টরূপে হয়। সুতরাং: v(int*M,int m){e=32;f=48;u=0;l=m;char a,... এছাড়াও, প্রায় সাদা অংশের প্রায় সমস্ত অংশই অনাদায়ী; ,V[m];for(i=0;... )printf(... );getch();}
wizzwizz4
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.