স্ট্রিংগুলিতে প্যাটার্নগুলি সন্ধান করুন


17

এই চ্যালেঞ্জের মধ্যে, আপনার কাজটি কোনও নির্দিষ্ট কাঠামোর সাথে সাবস্ট্রিংগুলি সনাক্ত করা।

ইনপুট

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

আউটপুট

যদি পাঠ্যের সাথে মেলে tএমন একটি স্ট্রিং থাকে p, তবে আপনার আউটপুটটি সেই সাবস্ট্রিং হতে হবে, এর :অক্ষরের সাথে মিলে থাকা স্ট্রিংগুলির মধ্যে কোলন withোকানো থাকবে p। উদাহরণস্বরূপ, যদি আমাদের থাকে t = byebyenowএবং p = aa, তবে bye:byeএটি একটি গ্রহণযোগ্য আউটপুট। মেলানো সাবস্ট্রিংয়ের জন্য বেশ কয়েকটি পছন্দ থাকতে পারে তবে আপনি কেবল তার মধ্যে একটি আউটপুট পাবেন।

যদি tকোনও মিলে যাওয়া সাবস্ট্রিং না থাকে তবে আপনার আউটপুটটিতে একটি দু: খিত মুখ হবে :(

বিধি এবং ব্যাখ্যা

বিভিন্ন অক্ষর pঅভিন্ন সাবস্ট্রিংয়ের সাথে p = abaমিল রাখতে পারে , সুতরাং স্ট্রিংয়ের সাথে মেলে AAA। নোট করুন যে অক্ষরগুলি অবশ্যই খালি খালি স্ট্রিংয়ের সাথে মিলিত হবে; বিশেষত, যদি এর pচেয়ে বেশি হয় tতবে আউটপুট অবশ্যই হবে :(

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন, এবং আপনি দুটি ইনপুট ক্রম পরিবর্তন করতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

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

বিন্যাসে দেওয়া হয়েছে pattern text -> output। নোট করুন যে অন্যান্য গ্রহণযোগ্য ফলাফল থাকতে পারে।

a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c

1
সমস্ত সাবস্ট্রিংয়ের শক্তি? কেন না!
orlp

1
@orlp এটি কেবল O(2^((n * (n + 1))/2)): পি
থ্রিএফএক্স

প্যাটার্ন স্ট্রিংয়ের একটি অঙ্ক কী বোঝায়?
শুক্র

@ ফেয়ারসাম এটি একটি চরিত্র, তাই এটি অন্য যে কোনও চরিত্রের মতোই মূলত একই।
থ্রিএফএক্স

@ থ্রিএফএক্স আমি নিশ্চিত নই কারণ প্রথম অনুচ্ছেদে কেবলমাত্র প্যাটার্নে "অক্ষর" উল্লেখ করা হয়েছে।
শুক্রবার

উত্তর:


6

পাইথন, 207 বাইট

import re
h=lambda x:"a"+str(ord(x))
def g(a,b):
 c,d="",set()
 for e in a:
  c+=["(?P<"+h(e)+">.+)","(?P="+h(e)+")"][e in d]
  d.add(e)
 f=re.search(c,b)
 return f and":".join(f.group(h(e))for e in a)or":("

সাথে কল g(pattern, string)

reবেশিরভাগ কাজ করতে মডিউল ব্যবহার করে ।


1

জাভাস্ক্রিপ্ট (স্পাইডারমনকি) (ES5.1), 198 বাইট

যেহেতু ইএস June জুন জুনে প্রকাশিত হয়েছিল, তাই আমি কোডের ES5.1 সংস্করণটি ES6 সমতুল্য সহ একসাথে পোস্ট করি, তবে ES5.1 সংস্করণটিকে মূল উত্তর হিসাবে ঘোষণা করি।

লোভী মিল, তাই প্রথম কেস "এন" এর পরিবর্তে "নয়" ফেরায়।

function(a,b){c=[o="indexOf"];r=a.split("");return(m=RegExp(r.map(function(i){return(e=c[o](i))>0?"\\"+e:(c.push(i),"(.+)")}).join("")).exec(b))?r.map(function(x){return m[c[o](x)]}).join(":"):":("}

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

জাভাস্ক্রিপ্ট (নোড.জেএস) (ইএস 6), 141 বাইট

a=>b=>(c=[o="indexOf"],r=[...a],m=RegExp(r.map(i=>(e=c[o](i))>0?"\\"+e:(c.push(i),"(.+)")).join``).exec(b))?r.map(x=>m[c[o](x)]).join`:`:":("

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

বাক্য গঠন বাক্য গঠনে আর্গুমেন্ট নেয়: f(a)(b)

ব্যাখ্যা (এবং অবরুদ্ধ):

function matchPattern(a, b) {                   // Main function
 var c = ["indexOf"];                           // Array used for the capturing groups
 var r = [...a];                                // Split the pattern first
 var m = RegExp(r.map(function(i) {             // Create the regex
  var e = c.indexOf(i);                         // Check if the character is found before
  if (e > 0)                                    // If so
   return "\\" + e;                             // Append the back reference to the regex
  else {                                        // If not
   c.push(i);                                   // Append the character to the array
   return "(.+)";                               // Append a capturing group to the regex
  }             
 }).join("")).exec(b);                          // Execute the regex
 if (m != null)                                 // If the pattern matches the string
  return r.map(function(x) {                    // Replace each letter
   return m[c.indexOf(x)];                      // With the corresponding substring
  }).join(":");                                 // And join them with ":"
 else                                           // If there is no match
  return ":(";                                  // Return ":("
}

1

ব্র্যাচল্যাগ , 35 বাইট

sᵗ~cᵗXlᵛ∧Xzdz≠ʰ∧Xt~ṇ{Ḷ∧":"|}ᵐ.∨":("

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

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

ঘন এবং বিভক্ত ব্যাখ্যা:

sᵗ~cᵗX

এক্স ইনপুট স্ট্রিংয়ের একটি স্ট্রস্ট্রিংয়ের একটি পার্টিশন যুক্ত প্যাটার্নযুক্ত।

lᵛ

প্যাটার্ন এবং পার্টিশনে একই সংখ্যক উপাদান রয়েছে।

Xzdz≠ʰ

কোনও দুটি অনন্য pattern char, matched substringজুড়ি কোনও প্যাটার্ন চরিত্র ভাগ করে না। এটি হ'ল একাধিক সাবস্ট্রিংগুলিতে কোনও প্যাটার্ন চরিত্রের মানচিত্র নেই, যদিও একাধিক প্যাটার্ন অক্ষর একটি সাবস্ট্রিংয়ের মানচিত্র করতে পারে।

Xt~ṇ{Ḷ∧":"|}ᵐ.∨":("

আউটপুটটি হ'ল পার্টিশনের উপাদানগুলি হ'ল কোলন দ্বারা যুক্ত, যদি না কিছু করা যায়, তবে সেক্ষেত্রে :(পরিবর্তে এটি করা যায়।

মনোলিথিক ব্যাখ্যা:

                                       The input
 ᵗ  ᵗ                                  with its last element replaced with
  ~c                                   a list which concatenates to
s                                      a substring of it
     X                                 is X,
       ᵛ                               the elements of which all have the same
      l                                length.
        ∧                              And,
         X                             X
          z                            zipped
           d                           with duplicate pairs removed
            z                          and zipped back
              ʰ                        has a first element
             ≠                         with no duplicate values.
               ∧                       Furthermore,
                 t                     the last element of
                X                      X
                  ~ṇ                   with its elements joined by newlines
                    {      }ᵐ          where each character of the joined string
                     Ḷ                 is a newline
                      ∧                and
                          |            is replaced with
                       ":"             a colon
                          |            or is passed through unchanged
                             .         is the output.
                              ∨        If doing any part of that is impossible,
                                       the output is
                               ":("    ":(".

এক ঘন্টারও বেশি সময় হয়ে গেছে এবং এটি এখনও ষষ্ঠ পরীক্ষার মামলাটি করেনি ... সম্ভবত এটি কার্যকরভাবে কাজ করে না? এটি এর প্রসেসরের ভাগের চেয়ে বেশি ব্যবহার করছে ...
অসম্পূর্ণ স্ট্রিং

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

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