অনুকূল প্যাটার্নটি সন্ধান করুন


33

প্রদত্ত একটি স্ট্রিং যেমন ছোট হাতের অক্ষর গঠিত,

aabaaababbbbaaba

এবং একটি ধনাত্মক পূর্ণসংখ্যা এন যেমন 4, আউটপুট একটি length- এন স্ট্রিং টন যেমন যখন যে T দৈর্ঘ্যের পুনরাবৃত্তি করা হয় গুলি , তারা যতটা সম্ভব সাধারণ অনেক অক্ষর যেমন আছে। প্রদত্ত উদাহরণের জন্য, সর্বোত্তম আউটপুট হবে aaba, কারণ এটিতে তেরটি অক্ষরের সাথে মিল রয়েছে:

s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
   ^^^^^^^^  ^ ^^^^

এবং কোন সম্ভাব্য টি আরো আছে। তবে, এর জন্য aaaaaabদুটি সম্ভাব্য আউটপুট রয়েছে: aaaaএবং aaba, যার প্রতিটিতে লক্ষ্য স্ট্রিংয়ের সাথে মিলিতভাবে 6 টি অক্ষর থাকে:

s: aaaaaab
t: aaaaaaaa (aaaa)
   ^^^^^^ 

s: aaaaaab
t: aabaaaba (aaba)
   ^^ ^^^^

হয় aaaaবা aabaআউটপুট করা যেতে পারে, বা উভয়ই আপনি চান। নোট করুন যে এর কখনও পুনরাবৃত্তি হয় না; টিa উভয় পুনরাবৃত্তি মান মধ্যে পিছনে সহজভাবে উপেক্ষা করা হয়।

পরীক্ষার মামলা

Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb  (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba

বিধি

  • আপনি ধরে নিতে পারেন ইনপুটটি কেবল সর্বনিম্ন অক্ষরের খালি খালি স্ট্রিং এবং কোনও ধনাত্মক পূর্ণসংখ্যার স্ট্রিংয়ের দৈর্ঘ্যের চেয়ে বড় নয়।
  • আপনি ইনপুটগুলি কোনও মানক বিন্যাসে এবং উভয় ক্রমে নিতে পারেন।
  • আপনি একটি একক স্ট্রিং আউটপুট করতে পারেন, বা অ্যারের আকারে একাধিক, নিউলাইন বা স্পেস ইত্যাদির দ্বারা পৃথক করে etc.
  • আপনার কোড অবশ্যই যেকোন মোটামুটি আধুনিক কম্পিউটারে প্রতিটি পরীক্ষার ক্ষেত্রে 1 মিনিটেরও কম সময়ে শেষ করতে হবে।
  • এটি , সুতরাং আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করুন।

2
এই চ্যালেঞ্জটি জাগার্ব-মানের। চমৎকার কাজ!
মার্টিন ইন্ডার

আমি ধরে নিচ্ছি যে কেবলমাত্র অনুসরণীয় চরিত্রগুলি উপেক্ষা করা হচ্ছে? সুতরাং আপনাকে এইরকম শীর্ষস্থানীয় চরিত্রগুলি উপেক্ষা করার অনুমতি দেওয়া হচ্ছে না: 2 abb -> baযেখানে এটি তৈরি করা হয়েছে (b)[ab]a: অগ্রণীকে (b)অগ্রাহ্য করা হয়, [ab]মিলছে।
কেভিন ক্রুইজসেন

কেভিন ক্রুজসেন ঠিক আছে, প্রথমে শুরুটি পুনরাবৃত্তি করতে হবে।
ETH প্রোডাকশনস

উত্তর:


11

জেলি , 11 বাইট

sZµṢŒrUṀṪµ€

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

এইটি নিয়ে ডেনিসকে পরাজিত করার প্রত্যাশা ছিল না, তাই এটি এফজিআইটিডাব্লু করার চেষ্টা করুন (বেশ কয়েকটি সম্ভাবনার চেষ্টা করার পরে; 11 করার একাধিক উপায় রয়েছে)। আমি সংক্ষিপ্তভাবে এসেছি, আমার অবাক করার অনেক কিছুই।

কমান্ড-লাইন আর্গুমেন্ট হিসাবে গণনা করে তারপরে স্ট্রিং নেয়। স্টটআউট আউটপুট।

ব্যাখ্যা

sZµṢŒrUṀṪµ€
s            Split {the first input} into {the second input}-sized groups
 Z           Transpose
  µ      µ€  On each of the transposed groups:
   Ṣ           Sort it;
    Œr         Run-length encode it;
      U        Rearrange it to the form {count, letter};
       Ṁ       Take the largest element (i.e. largest count)
        Ṫ      Take the second element of the pair (i.e. just the letter)

এটি অন্তর্দৃষ্টি ব্যবহার করে যে প্যাটার্নের প্রতিটি পদের অক্ষরটি অবশ্যই সেই অবস্থানের সাথে সর্বাধিক সাধারণ চিঠি হতে পারে। প্যাটার্ন-আকারের গোষ্ঠীগুলিতে বিভক্ত হয়ে স্থানান্তরকরণের মাধ্যমে আমরা কোনও নির্দিষ্ট প্যাটার্নের সাথে সম্পর্কিত চিঠিগুলি খুঁজে পেতে পারি। এই সমাধানটি এত দীর্ঘ হওয়ার মূল কারণটি হ'ল জেলি তালিকার মোডটি খুঁজে পাওয়ার কোনও সংক্ষিপ্ত উপায় বলে মনে করছেন না (আমি বেশ কয়েকটি চেষ্টা করেছি, তবে তারা কমপক্ষে ছয় বাইট দীর্ঘ)।

জেলি , 10 বাইট, @ ডেনিসের সমাধানের উপর ভিত্তি করে

⁸ċ$ÞṪ
sZÇ€

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

এটি @ ডেনিসের সমাধান এবং আমার নিজস্ব সংমিশ্রণ; এই দ্রবণটিতে একটি পাঁচ-বাইট মোড ছিল, যা আমি এই সমাধানটির জন্য চুরি করেছি। (আমার ইতিমধ্যে ভিত্তিক সমাধান রয়েছে ⁸ċ, তবে এটির সাথে ছয়টি বাইটের নিচে নামতে পারিনি; আমি ব্যবহারের কথা ভাবিওনি thought Þ)

ব্যাখ্যা

µ…µ€এবং Ç€(এর সাথে) পূর্ববর্তী লাইনের সাথে) উভয়ই তিনটি বাইট দীর্ঘ (পরেটির একটি নতুন লাইনের প্রয়োজন) এবং সমতুল্য। সাধারণত আমি প্রাক্তনটি ব্যবহার করি তবে পরবর্তীটিরটি আরও নমনীয় হয়, কারণ এটি আপনাকে যুক্তিটি উল্লেখ করার জন্য ব্যবহার করতে দেয় ।

এই এটা সম্ভব (বাছা করে তোলে Þ) এ ঘটনার সংখ্যা দ্বারা ( ⁸ċ), তারপর শেষ উপাদান নিতে ( ), মাত্র পাঁচ অক্ষর মোড খুঁজে।


5
ডেনিসকে নিজের ভাষা দিয়ে দুর্দান্ত চাকরি ছাড়িয়ে গেছে! : পি
হাইপারনিউট্রিনো

10

গণিত, 51 বাইট

#&@@@Commonest/@(PadRight@Partition[#2,UpTo@#])&

ইনপুট এবং আউটপুট হ'ল অক্ষরের তালিকা।

ট্রান্সপোজের লাইনের মোডের উপর ভিত্তি করে। আমি বিশ্বাস করি যে তারা বিল্ট- ইনটিকে Commonest কেবলমাত্র স্পাইট কোড গল্ফারদের জন্য একটি তালিকার মোডের জন্য বলে ।


কমপক্ষে এটি তার চেয়ে কম বাইট MostCommon...
ETH প্রোডাকশনস

7

পাইথন 3, 99, 73 61 বাইট

-12, থেক্স থেকে @ রড

lambda s,n:''.join(max(s,key=s[i::n].count)for i in range(n))

একই ধারণা, তবে আমদানি বিবৃতিটি মুছে ফেলার জন্য এটি পুনরায় লিখুন।

lambda s,n:''.join(max(s,key=lambda c:s[i::n].count(c))for i in range(n))

মূল

from collections import*
lambda s,n:''.join(Counter(s[i::n]).most_common(1)[0][0]for i in range(n))

ব্যাখ্যা:

s[i::n]                  a slice of every nth character of s, starting at position i

Counter(s[i::n])         counts the characters in the slice
  .most_common()         returns a list of (character, count) pairs, sorted by decreasing count
    [0][0]               grabs the letter from the first pair (i.e., the most common letter
      for i in range(n)  repeat for all starting positions

''.join                  combines the most common letters into a single string

আপনি পাইথন 2.7 এ ''.join()যেতে পারেন এবং স্ট্রিংগুলির একটি তালিকা ফেরত দিতে ড্রপ করতে পারেন
রড

@ রড ড্রপিং ''.join(...)এটিকে একটি জেনারেটর ফিরিয়ে আনবে, নিশ্চিত নয় যে এটির আউটপুট অনুমোদিত।
L3viathan

@ L3viathan এটি কাজ করার জন্য অজগর 2.7 হওয়া দরকার, অন্য মন্তব্যে যোগ করা হয়েছে
রোড

এটি কীভাবে কাজ করে তার কিছু ব্যাখ্যা লিখতে পারেন?
ডেড পসসাম

2
@ রড যদি আপনি সম্ভাব্য সমস্ত সমাধান ফিরে পান তবে তার জন্য তালিকার একটি তালিকা কেবলমাত্র প্রশ্নে অনুমোদিত in আমি এটি বোঝাতে চেয়েছিলাম।
mbomb007

5

পাইথন 2, 106

এখন এটি অন্যরকম উত্তর! আমি ভিক্ষা থেকে এক (প্রায়) লাইনারের কথা ভাবছিলাম। এখন আরও ছোট, @ রড দ্বারা জিপ ব্যবহারের ভিত্তিতে।

উত্তর হিসাবে ল্যাম্বডাস ব্যবহার সম্পর্কে স্পষ্টকরণের জন্য @ এল3ভিয়াথন এবং @ রডকে ধন্যবাদ

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

lambda S,N:max(combinations(S,N),key=lambda s:sum(x==y for x,y in zip(S,s*len(S))))
from itertools import*

ব্যাখ্যা:

combinations(S,N) এস এর অক্ষর থেকে সমস্ত সংমিশ্রণ দৈর্ঘ্য এন তৈরি করে

max()যুক্তি রয়েছে keyযা উপাদানগুলির তুলনা করতে ইনপুট ফাংশন হিসাবে গ্রহণ করে

lambda s:sum(x==y for x,y in zip(S,s*len(S))) যেমন ফাংশন হিসাবে পাস

এই ল্যাম্বদা টিপলগুলির তালিকায় তাল মিলিয়ে মিলিয়ে অক্ষরের সংখ্যা গণনা করে zip(S,s*len(S))

s- সমন্বয়গুলির মধ্যে একটি এবং এটির দ্বারা len(S)গুণিত যার দ্বারা স্ট্রিং তৈরি হয় যা এস এর চেয়ে বেশি দীর্ঘ গ্যারান্টিযুক্ত

zipপ্রতিটি স্ট্রিং এর অক্ষরের tuples তৈরি করে Sএবং s*len(S)মিলিত করা যায় না এমন সমস্ত অক্ষর উপেক্ষা করে (এক স্ট্রিংয়ের চেয়ে অন্যটির চেয়ে দীর্ঘতর ক্ষেত্রে)

সুতরাং maxসমন্বয় চয়ন করে, যে সর্বাধিক যোগফল উত্পাদন করে produce


1
আপনার ব্যবহারের জন্য প্রয়োজন হবে না [], এছাড়াও আপনি ব্যবহার করছেন ফাংশন ভিতরে তালিকা ধী উপর 1 for ... if <cond>আপনি সরাসরি ব্যবহার করতে পারেন <cond> for ...যেহেতু এটি ব্যবহার করা হবে sum, পাইথন নিতে হবে Trueযেমন 1এবং Falseহিসাবে0
ডান্ডা

@ রড আপনাকে ধন্যবাদ! আমি যদি আমার উত্তরটি আরও স্কেইজ করতে পারি তবে এটি আপনার উত্তরে রূপান্তরিত হবে, পদ্ধতির দিকটি একই: ডি তাই আমি এখনই কিছু আলাদা চেষ্টা করছি
মৃত পসসাম

হ্যাঁ, কেবল তাই বলছেন যাতে আপনি আপনার ভবিষ্যতের উত্তরগুলি ব্যবহার করতে পারেন: 3
রড

1
একটি ল্যাম্বডায় স্যুইচ করা 7 বাইট সাশ্রয় করবে।
L3viathan

1
@ ডেডপসাম তিনি বোঝাতে চেয়েছিলেন (পাদলেখ এবং শিরোনামটি নোট করুন) এবং হ্যাঁ, একটি ফাংশন একটি বৈধ উত্তর , যদি এটি একটি ল্যাম্বডা এমনকি আপনার প্রয়োজনও হয় নাf= (এটি
রড

5

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

(n,s)=>s.replace(/./g,(_,i)=>[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=r=``)&&r)

@ অর্নল্ডকে দু'বার ধন্যবাদ 3 বার সংরক্ষণ করা হয়েছে। 97-বাইট সমাধান যা সমস্ত নন-লাইন অক্ষরের সাথে কাজ করে:

(n,s)=>s.replace(/./g,(_,i)=>[...s].map((c,j)=>j%n-i||(o[c]=-~o[c])>m&&(m++,r=c),m=r=``,o={})&&r)

পূর্ববর্তী 104-বাইট সমাধানটি নিউলাইন অক্ষরের সাথেও কাজ করে:

(n,s)=>[...Array(n)].map((_,i)=>[...s].map((c,j)=>j%n-i||(o[c]=-~o[c])>m&&(m++,r=c),m=0,o={})&&r).join``

খুব সুন্দর. পরীক্ষার কেসগুলি যুক্ত করার সময় আমি রেফারেন্সের জন্য একটি সমাধান গল্ফ করেছি এবং 122 বাইটে এসে পৌঁছেছি, প্রতিটি চরের মধ্য দিয়ে লুপিং করে, অবজেক্টগুলির একটি অ্যারেতে গণনাগুলি সংরক্ষণ করি, তারপরে সেই অ্যারে থেকে স্ট্রিং তৈরি করি।
ইটিএইচ প্রডাকশনস

oএকটি নতুন অবজেক্টের সূচনা করার পরিবর্তে , আপনি কেবল mapতার তৃতীয় প্যারামিটার ব্যবহার করে পাস করা অ্যারেটি পুনরায় ব্যবহার করতে পারবেন ?
আর্নল্ড

@ আর্নাউল্ড হুম, আমি অনুমান করি যে এটি কাজ করে কারণ প্রশ্নটি ছোট হাতের অক্ষরের নিশ্চয়তা দেয়, সুতরাং আমি অ্যারের উপাদানগুলিকে গণনা দিয়ে বিভ্রান্ত করব না ...
নিল

আমার মনে হয় (n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')আরও 3 টি বাইট সংরক্ষণ করা উচিত। (অথবা কারিটিং সিনট্যাক্স ব্যবহার করে 4 বাইট))
আর্নল্ড

@ আরনাউল্ড খারাপ নয়, তবে আমি আরও দুটি বাইট ছেঁটেছি। (এবং আমার বাইট গণনাগুলিও স্থির করে দিয়েছিল; একটি পিছনে নতুন লাইনে তাদের ফেলেছিল
নীল

3

জেলি , 12 11 বাইট

s@ZċþZMḢ$€ị

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

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

s@ZċþZMḢ$€ị  Main link. Arguments: n (integer), s (string)

s@           Split swapped; split s into chunks of length n.
  Z          Zip/transpose, grouping characters that correspond to repetitions.
   ċþ        Count table; for each slice in the previous result, and each character
             in s, count the occurrences of the character in the group.
             This groups by character.
     Z       Zip/transpose to group by slice.
        $€   Map the two-link chain to the left over the groups.
      M        Find all maximal indices.
       Ḣ       Head; pick the first.
          ị  Index into s to retrieve the corresponding characters.


না, তা হয় না।
ডেনিস

2

পাইথ, 11 বাইট

meo/dNd.TcF

হিসাবে ইনপুট লাগে s,nঅক্ষরের তালিকা হিসাবে এবং আউটপুট ।

ব্যাখ্যা

meo/dNd.TcF
         cFQ   Split s into chunks of length n.
       .T      Transpose.
m o/dNd        Sort characters in each string by frequency.
 e             Take the most common.

2

জাপট , 16 15 বাইট

1 টি বাইট সংরক্ষিত হয়েছে @ ওবারাকনকে ধন্যবাদ

Ç=VëUZ)¬ñ!èZ o

-Pপতাকাটির জন্য 14 বাইট কোড + 1 বাইট । এটি অনলাইন চেষ্টা করুন!

অবহেলিত এবং ব্যাখ্যা

 Ç   =VëUZ)¬ ñ!èZ o
UoZ{Z=VëUZ)q ñ!èZ o}
                          Implicit: U = input number, V = input string
Uo                        Create the range [0...U).
  Z{               }      Map each item Z by this function:
      VëUZ                  Take every U'th char of V, starting at index Z.
    Z=    )                 Call the result Z.
           q                Split the result into chars.
             ñ!èZ           Sort each char X by the number of occurrences of X in Z.
                  o         Pop; grab the last item (the most common char).
                      -P  Join the results (array of most common chars) into a string.

আমি মনে করি আপনি gJo
অলিভার

@ ওবরকন এটি প্রতিভা, ধন্যবাদ!
ইটিএইচ প্রোডাকশনস


1

05 এ বি 1 ই , 17 বাইট

Iôð«øvy{.¡é®èÙJðÜ

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

ব্যাখ্যা

Iô                 # split 2nd input in chunks of 1st input size
  ð«               # append a space to each
    ø              # zip
     vy            # for each y in the zipped list
       {           # sort the string
        .¡         # group into chunks of consecutive equal elements
          é        # sort by length
           ®è      # pop the last element (the longest)
             Ù     # remove duplicate characters from the string
              J    # join the stack into one string
               ðÜ  # remove any trailing spaces

1

পিএইচপি, 245 বাইট

function p($c,$s,$r=""){global$a;if(($c-strlen($r)))foreach(str_split(count_chars($s,3))as$l)p($c,$s,$r.$l);else{for($v=str_pad("",$w=strlen($s),$r);$z<$w;)$t+=$v[$z]==$s[$z++];$a[$t][]=$r;}}p($argv[1],$argv[2]);ksort($a);echo join(" ",end($a));

অনলাইন সংস্করণ

ভাঙ্গন

function p($c,$s,$r=""){
    global$a;
    if(($c-strlen($r)))  # make permutation
        foreach(str_split(count_chars($s,3))as$l)
            p($c,$s,$r.$l); #recursive
    else{
        for($v=str_pad("",$w=strlen($s),$r);$z<$w;) 
        $t+=$v[$z]==$s[$z++]; #compare strings
        $a[$t][]=$r; # insert value in array
    }
}
p($argv[1],$argv[2]); #start function with the input parameter
ksort($a); # sort result array 
echo join(" ",end($a)); #Output

1

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

import Data.Lists
f n=map(argmax=<<(length.).flip(filter.(==))).transpose.chunksOf n

ব্যবহারের উদাহরণ:

f 10 "bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd"
"ebbbdbeece"

nপ্রতিটি উপলিস্টের সর্বাধিক ঘন উপাদানগুলির জন্য ইনপুট স্ট্রিংটি দৈর্ঘ্যের অংশগুলিতে বিভক্ত করুন , স্থানান্তর করুন এবং ফিফাইন্ড দিন ind


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