দ্রুত টপসপস গণনা


11

এজেডএসপিএস থেকে :

ধরুন আপনার কাছে একটি ডেক রয়েছে যাতে এন কার্ড থাকে। প্রতিটি কার্ডে 1 থেকে এন পর্যন্ত একটি সংখ্যা থাকে এবং প্রতিটি নম্বর ঠিক এক কার্ডে প্রদর্শিত হয়। আপনি উপরের কার্ডের নম্বরটি দেখুন - আসুন এটি কে - এবং তারপরে শীর্ষ কে কার্ডগুলির ক্রমটি বিপরীত করুন। শীর্ষস্থানটি 1 না হওয়া পর্যন্ত আপনি এই প্রক্রিয়াটি চালিয়ে যান - শীর্ষ নম্বরটি পড়া এবং তারপরে কার্ডের সাথে সম্পর্কিত সংখ্যার বিপরীতে।

প্রদত্ত ডেকের জন্য বিপরীত সংখ্যার গণনা করার জন্য দ্রুততম প্রোগ্রামটি লিখুন। নোট করুন যে আপনি যদি প্রতিযোগিতায় অংশ নিচ্ছেন তবে আপনাকে আপনার কোড পোস্ট করার অনুমতি দেওয়া হচ্ছে না (এবং এইভাবে আমি এখনও আমার কোড পোস্ট করব না)।


ইনপুট / আউটপুট মডেল কি? কোন ভাষার বিধিনিষেধ? আপনি প্রতিটি এন্ট্রি কত দ্রুত নির্ধারণ করবেন?
আআআআআআআআআআআআআআআআআআআআআআআআ

অ্যাজস্পিসির জন্য একটি ডেডিকেটেড স্ট্যাকেক্সচেঞ্জ হতে পারে;)
এভেলেক্স

তাহলে আমাদের কি সমাধান পোস্ট করার অনুমতি দেওয়া হয় নাকি?
আশেলী

হ্যাঁ. প্রতিযোগিতা শেষ হয়েছে।
আলেকজান্দ্রু

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

উত্তর:


5

জাভাস্ক্রিপ্ট

function(d){for(t=0;x=(n=d[0])-1;t++)for(i=0;i<n/2;i++){m=d[x-i];d[x-i]=d[i];d[i]=m}return t}

আপনি এটি ডেক পাস, যেমন:

f([3, 2, 1]) // 1
f([2, 3, 1]) // 2
f([1, 2, 3]) // 0

সুতরাং আপনি বিজয়ী! :)
ব্যবহারকারী অজানা

3

স্কেলা: (এটি কোনও গল্ফ নয় - তাই না?)

def transform (l: List[Int], sofar: Int = 0) : Int =
  if (l(0) == 1) sofar else transform (l.take (l(0)).reverse ::: l.drop (l(0)), sofar + 1)

টেস্টকেস এবং স্টপওয়াচের সাথে ডেকের শিফলিং সহ সম্পূর্ণ অ্যাপ্লিকেশন:

object DeckReverse extends Application {

  def transform (l: List[Int], sofar: Int = 0) : Int = 
    if (l(0) == 1) sofar else transform (l.take (l(0)).reverse ::: l.drop (l(0)), sofar + 1)

  def stopwatch (count: Int, size: Int) = {
    val li = (1 until size).toList 
    val r = util.Random 

    val start = System.currentTimeMillis ()
    (0 until count).foreach (_ => transform (r.shuffle (li)))
    val stop = System.currentTimeMillis ()

    println ("count: " + count + "\tsize: " + size + "\tduration: " + (stop - start) + " msecs") 
  }

  stopwatch (1000, 100)
}

গণনা: 1000 আকার: 100 সময়কাল: 1614 মেসিএস মেশিন: একক পেন্টিয়াম এম 2 গিগাহার্টজ


2

পাইথন, ৮৪ টি চর

যাইহোক গল্ফ করছি ... আমি n-1 এর মাধ্যমে 0 নম্বর ব্যবহার করছি। অ্যারেটি একটি ভেরিয়েবল এক্স-এ সংরক্ষণ করা হয়েছে বলে ধরে নেওয়া, এটি আমার কাছে পাইথনের ৮৪ টি চর লাগে।

while x[0]:x[:x[0]+1]=x[x[0]::-1]

তবে মেমরির অপব্যবহারের কারণে পারফরম্যান্সটি বেশ খারাপ।


0

সি

int revno(int* deck, int n) {
  int k,j,r=0;
  for(;;) {
    k=*deck;
    if (k==1) {
      return r;
    }
    for (j=0; j<k/2; j++) {
      int tmp=deck[j];
      deck[j]=deck[k-j];
      deck[k-j]=tmp;
    }
    r++;
  }
}

deckডেকগুলি প্রতিনিধিত্ব করে এমন একটি পূর্ণসংখ্য অ্যারেতে নির্দেশক। nকার্ড সংখ্যা। স্পষ্টতই স্মৃতি সুরক্ষা কলকারীর কাজ।

এটি সম্ভবত সাম্প্রতিক কম্পিউটারগুলিতে এবং উচ্চ-স্তরের ভাষায় দ্রুততম অ্যালগরিদমের নিকটে রয়েছে। কেবলমাত্র asm- স্তরের কৌশলগুলি এটি দ্রুত তৈরি করা যেতে পারে, তবে তাদের সাথে ভারী নয়।


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