একটি স্ট্রিং এর রান গণনা


11

ডব্লিউ রাইটারের স্ট্রিংয়ে রান সংখ্যা থেকে নেওয়া নিম্নলিখিত সংজ্ঞাগুলি বিবেচনা করুন । লক্ষ্য করুন যে শব্দ, স্ট্রিং এবং সাবস্ট্রিং সমস্ত মোটামুটি প্রতিশব্দ।

একটি স্ট্রিংয়ের একটি রান একটি স্ট্রিংয়ের মধ্যে পর্যায়ক্রমিক সেগমেন্টের অযোগ্য (একই সর্বনিম্ন সময়ের সাথে)।

যখনই এই সমীকরণের উভয় পক্ষকে সংজ্ঞায়িত করা হয় তখন w শব্দের একটি পি পিরিয়ডের যেকোন ধনাত্মক পূর্ণসংখ্যা পি হয় w আসুন প্রতি (ডাব্লু) ডাব্লু এর ক্ষুদ্রতম সময়ের আকারটি বোঝায়। আমরা বলি যে একটি শব্দ ডাব্লু পর্যায়ক্রমিক iff প্রতি (ডাব্লু) <= | ডাব্লু | / 2।

উদাহরণস্বরূপ, স্ট্রিং বিবেচনা করুন x = abcabper(abcab) = 3হিসাবে x[1] = x[1+3] = a, x[2]=x[2+3] = bএবং কোন ছোট সময়কাল আছে। স্ট্রিং abcabতাই পর্যায়ক্রমিক নয়। তবে স্ট্রিং ababপর্যায়ক্রমিক (আবাব) = 2 অনুসারে per

স্ট্রিং w-তে একটি রান (বা সর্বাধিক সময়কাল) হল একটি অন্তর [i ... j] j> = i সহ, যেমন

  • ডব্লু [আমি ... জে) পি = পিরিয়ড (ডাব্লু [আমি ... জ]) পিরিয়ড সহ একটি পর্যায়ক্রমিক শব্দ
  • এটি সর্বাধিক। সাধারণত, ডাব্লু [আই -1] = ডাব্লু [আই -1 + পি] বা ডব্লু [জে + 1] = ডব্লু [জে + ১-পি] নয়। অনানুষ্ঠানিকভাবে, রান একই সময়ের সাথে বৃহত্তর রানের মধ্যে থাকতে পারে না।

রুনস (ডাব্লু) দ্বারা ডাব্লু রানের সেটকে বোঝান।

উদাহরণ

চারটি রান atattattহ'ল [৪,৫] = টিটি, [,,৮] = টিটি, [১,৪] = আত, [২,৮] = টট্ট।

স্ট্রিংটিতে aabaabaaaacaacacনিম্নলিখিত 7 রান রয়েছে:

[১,২] = আ, [৪,৫] = আ, [,,১০] = আআআ, [১২,১৩] = আ, [১৩,১]] = একা, [১,৮] = আবাবা, [৯ , 15] = আকাচা।

আপনার আউটপুট রানের তালিকা হওয়া উচিত। প্রতিটি রানকে অন্তর্ভুক্ত করে এটি প্রতিনিধিত্ব করে তবে এটি কেবল স্ট্রিংয়ের আউটপুট দেওয়ার প্রয়োজন হবে না to সঠিক ফর্ম্যাটিং যা আপনার পক্ষে সুবিধাজনক তা হতে পারে।

উদাহরণগুলি 1-ইনডেক্সিং ব্যবহার করে তবে এটি আরও সুবিধাজনক হলে পরিবর্তে 0-সূচি ব্যবহার করতে আপনি মুক্ত are

টাস্ক

কোডটি লিখুন যা একটি স্ট্রিং w, আউটপুট RUNS (w) দেয়।

ভাষা এবং ইনপুট

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


4
দুর্দান্ত চ্যালেঞ্জ, তবে ডিফল্টকে ছাড়িয়ে ফাংশনগুলি অস্বীকার করার কোনও ভাল কারণ আছে কি?
মার্টিন ইন্ডার

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

4
তবে এটি প্রচুর ওভারহেড কোডেরও কারণ ঘটায় যা প্রতিযোগিতাটি ভার্বোজ সিনট্যাক্সের সাহায্যে ভাষার জন্য অন্যায্য করে তোলে। আমি জাভাতে গল্ফ করব না উদাহরণস্বরূপ আমি যদি class A{public static ...}গল্ফ কোডটি লিখতে চাইতাম
প্রতিবার লিখতে হত

@ বাসড্রপকম্বারউবউবউব্বব আমি দেখতে পাচ্ছি যে সেখানে ভাল-মন্দ আছে। আমি আরও দৃ strongly়তার সাথে মাপসই করা। আমি মনে করি এপিএলের উদাহরণটিকে পাইথনের সাথে তুলনা না করে যে কোনও ক্ষেত্রে অনুরূপ ভাষায় গল্ফের উত্তরগুলির দৈর্ঘ্যের তুলনা করা সবচেয়ে আকর্ষণীয়।

"কোনও রান যদি এটি কোনও বৃহত্তর রানের মধ্যে পুরোপুরি অন্তর্ভুক্ত না থাকে তবে সর্বাধিক" তবে আপনার প্রথম উদাহরণে, [7,8] পুরোপুরি [২,৮] এর মধ্যে রয়েছে। বা আপনি কি সেই রানগুলির বিষয়ে কঠোরভাবে কথা বলছেন যা একই স্ট্রিংয়ের পুনরাবৃত্তি করে?
অ্যাডিটসু ছেড়ে গেছে কারণ এসই

উত্তর:


2

পাইথ, 38 বাইট

{smm,hk+ekdfgaFTdcx1xM.ttB+0qVQ>QdZ2Sl

  m                                 SlQ   map for d in [1, …, len(input)]:
                            qVQ>Qd          pairwise equality of input[:-d] and input[d:]
                        tB+0                duplicate this list, prepending 0 to one copy
                      .t          Z         transpose, padding with 0
                    xM                      pairwise xor
                  x1                        find all occurrences of 1
                 c                 2        chop into groups of 2
           f                                filter for groups T such that:
             aFT                              the absolute difference between its elements
            g   d                             is greater than or equal to d
   m                                        map for groups k:
     hk                                       first element
    ,  +ekd                                   pair with the last element plus d
 s                                        concatenate
}                                         deduplicate

পরীক্ষা স্যুট


আমি "[[3, 5], [6, 8], [0, 4], [1, 8]]" "অ্যাটট্টট" থেকে পেয়েছি। [3,5] "টিটি" উপস্থাপন করে? আপনি যদি উচ্চ স্তরেও ব্যবহার করেছেন সেই অ্যালগরিদমটি ব্যাখ্যা করতে পারেন তবে দুর্দান্ত হবে।

@Lembik হ্যাঁ, [i, j](0-সূচীবদ্ধ) অক্ষরের মধ্যে ছে শুরুর প্রতিনিধিত্ব করে i-1এবং iএবং অক্ষরের মধ্যে বিভক্তি j-1এবং j। এটি পাইথ এবং সর্বাধিক বুদ্ধিমান ভাষাগুলির মানক কনভেনশন, এটি হওয়া উচিত ( এখানে এবং এখানে দেখুন )।
অ্যান্ডারস ক্যাসরগ

গ্রেট। আপনার সমাধানটি স্বজ্ঞাতভাবে বর্ণনা করা সম্ভব? দুর্ভাগ্যক্রমে আমি আপনার কোড বিবরণ থেকে এটিকে প্রকৌশলীটিকে বিপরীত করতে পারি না।

1
@ ল্যাম্বিক ধরুন আমরা পিরিয়ডের রান খুঁজছি d। আমরা অক্ষর i + d অক্ষরের সাথে মেলে এমন সমস্ত অবস্থানগুলি আমরা খুঁজে পাই। এরপরে আমরা কমপক্ষে পরপর এই জাতীয় অবস্থানগুলির রান খুঁজে পাই। সবার জন্য পুনরাবৃত্তি d। আমাদের শেষে ডুপ্লিকেট করতে হবে কারণ আসল সময়কাল কেবলমাত্র ডি এর বিভাজক হতে পারে।
অ্যান্ডারস ক্যাসরগ

1

সিজেম, 66

q:A,2m*{~A>_@)_@<2*@@2*<=},{_2$-2>2,.+={+}&}*]{[_1=\)\0=2*)+]}%_&p

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

সংক্ষিপ্ত বর্ণনা:

অ্যালগরিদম 4 টি ধাপে কাজ করে (তাদের মধ্যে প্রথম 3 টি আপনি দেখতে পারেন এমন 3 টি প্রধান ব্লকের সাথে সম্পর্কিত):

  1. সমস্ত [দৈর্ঘ্যের সূচী] জুটিগুলি যা সদৃশ সাবস্ট্রিংয়ের সাথে মিল রাখে (যেমন আবা আবা আআআআআআআাকাক্যাক); এগুলি রানের অংশ।
  2. সংযুক্তি জুটি যা একই রানের অংশ, অর্থাৎ পরপর সূচক এবং একই দৈর্ঘ্য / সময়কাল।
  3. সর্বনিম্ন সূচক এবং সর্বোচ্চ সূচক + 2 * দৈর্ঘ্য - 1 গ্রহণ করে প্রকৃত রানগুলি তৈরি করুন ruct
  4. শেষে, ডুপ্লিকেট করা রানগুলি (যা একই সময়ের সাথে বিভিন্ন সময়ের সাথে প্রাপ্ত হয়) সরান

আমি এটি আরও গল্ফ করতে চাই, সুতরাং এটি সব পরিবর্তনের বিষয়।


এই জন্য আপনাকে ধন্যবাদ. আপনি যে অ্যালগরিদমটি খুব বেশি ব্যবহার করেছেন তা কি ব্যাখ্যা করতে পারেন?

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