যুক্তযোগ্য স্ট্রিং


28

একটি স্ট্রিং যুক্তযোগ্য, যদি তা সাবট্রিংগুলিতে বিভক্ত করা যায়, যার প্রতিটি একটি স্ট্রিং যা পরপর দুবার পুনরাবৃত্তি হয়। উদাহরণস্বরূপ, aabaaababbbabaযুক্তযোগ্য:

aaba aaba
b b
ba ba

একটি অ খালি স্ট্রিং প্রদত্ত a's এবং bএর, আউটপুট একটি Truthy মান যদি এটা pairable এবং Falsey মান যদি না হয় তাহলে।

Pairable:

aa
abaaba
bbababbb
aabaaababbbaba
babababa
bbbbbbbbbbbb
aaababbabbabbbababbaabaabaababaaba
aaaabaab

যুক্তযোগ্য নয়:

a
ba
baab
abaabaaba
bbbbbbbbbbbbbbb
baababbabaaaab
aaaaabbaaaaa

আপনার ভাষাতে ইতিমধ্যে একটি সংক্ষিপ্ত রেজেক্স উত্তর থাকলেও আমি আপনাকে নন-রেজেক্স-ভিত্তিক সমাধান নিয়ে আসতে উত্সাহিত করি। আপনি এগুলিকে "নো রেজেক্স" হিসাবে চিহ্নিত করতে পারেন। রেজেক্স দ্বারা, আমি একটি অন্তর্নির্মিত স্ট্রিং প্যাটার্নের সাথে মেলে সাবসিস্টেম।


লিডারবোর্ড:


আমরা ছাড়া abকি অন্য কিছু ব্যবহার করতে পারি ?
এরিক আউটগল্ফার

যদি বাব্বব্বব পেয়ার হয়, তবে বাব আর আআআআআআআআআআআবআবআআআআআ হয় না?
rnso

@ আরএনএসো আমার উপলব্ধি থেকে, bbababbb কে 3 জোড়া হিসাবে ছিটিয়ে দেওয়া যেতে পারে: বিবি, আবাব এবং বিবি, যা মূল স্ট্রিং গঠনের সাথে একত্রে মিলিত হয়, যেখানে অন্য দু'জনও পারে না।
সানি পুন

প্রশ্ন দ্বারা "যার প্রত্যেকে (সাবস্ট্রিং) একটি স্ট্রিং যা CONSECUTIVELY এর দ্বিগুণ পুনরাবৃত্তি হয়" এবং এটি bbababbb এর সাথে সন্তুষ্ট নয়। অন্যথায়, বাব এছাড়াও AAAAA BB AAAAA করতে বাব করার বিভক্ত, এবং aaaaabbaaaaa হতে পারে।
rnso

@ আরএনএসো নিশ্চিত হন না যে আপনি সেখানে কী বোঝাতে চাইছেন। ধারাবাহিকভাবে, আমার অর্থ দুটি পুনরাবৃত্তি একে অপরের পাশে রয়েছে। "বা বি" তে, দুটি বি এর দ্বারা পৃথক করা হয়েছে, যাতে এটি কাজ করে না।
xnor

উত্তর:


11

পাইথন 2, 68 63 বাইট

f=lambda s,n=1:s==2*s[:n]or''<s[n:]>-f(s,n+1)<f(s[n:])*f(s[:n])

রিটার্নস সত্য বা মিথ্যাআইডিয়নে এটি পরীক্ষা করুন ।


4
এটি একটি দ্বিগুণ কেন্দ্র এবং বিভাজন কেন্দ্রের উভয় জন্য সূচক ব্যবহার করে একটি সত্যই পরিষ্কার পুনরাবৃত্তি। এটা মজার বিষয় যে সত্যতা কোনও কিছুর চেয়ে কম হিসাবে পরীক্ষা করা হয়। আমি কিছু উন্নতি দেখতে পাচ্ছি ...
xnor

8

রেটিনা , 11 বাইট

^((.+)\2)+$

সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন। প্রথম দুটি বাইট এটিকে বহু-লাইন করে তোলে।

নিয়মের খুব আক্ষরিক ব্যাখ্যা, অবশ্যই রেটেক্স ব্যবহার করে, যেমন সমস্ত রেটিনা প্রোগ্রাম করবে।


2
ডাঙ্গিত, আমি এটি পোস্ট করার জন্য 3 সপ্তাহের জন্য অপেক্ষা
করছিলাম

2
মার্টিনও অপেক্ষা করছিল
xnor

5
উপস! আমি ওকে কেবল 10 সেকেন্ডের মধ্যেই মারলাম ... আচ্ছা আমি নিশ্চিত যে আমি কোনও হেক্সাগনির উত্তর লিখলে সে আমাকে ক্ষমা করে দেবে!
FryAmTheEggman

5
পুনঃটুইট করুন :)
মার্টিন ইন্ডার

2
পার্লের সাথে এটি একই রকম:perl -pE '$_=/^((.+)\2)+$/'
দাদা

8

জেলি , 10 বাইট

ẆŒPẋ€€2F€ċ

হুবহু দক্ষ নয় ... অনলাইনে চেষ্টা করুন!

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

ẆŒPẋ€€2F€ċ  Main link. Argument: s (string)

Ẇ           Window, generate the array of all substrings of s.
 ŒP         Powerset; generate all subarrays of substrings of s.
   ẋ€€2     Repeat each substring in each subarray twice.
            For example, ["ab", "a", "b"] becomes ["abab", "aa", "bb"].
       F€   Flatten the subarrays by concatenating their strings.
         ċ  Count how many times s appears in the generated strings.

এটি ... অদক্ষ মনে হচ্ছে। যুক্তিসঙ্গত সময় ফ্রেমে কতক্ষণ ইনপুটগুলি এই পরিচালনা করতে পারে?
জন ডিভোরাক

1
এটি অত্যন্ত অপ্রতুল ( ও (2 ^ n ^ 2) , আমার মনে হয়)। আমাকে স্থানীয়ভাবে চেক করতে হবে। টিআইও 6 দৈর্ঘ্যের স্ট্রিংয়ের জন্য মেমরির বাইরে চলে গেছে ।
ডেনিস

8
6 টি দৈর্ঘ্যের একটি স্ট্রিং আমার মেশিনে 3:20 মিনিট সময় নেয় এবং 6 গিগাবাইট মেমরির প্রয়োজন।
ডেনিস

1
@ ডেনিস এখন আসুন 100 দৈর্ঘ্যের ইনপুট না করা উচিত কারণ সমস্ত কিছু ক্র্যাশ হয়ে যাবে। হ্যাঁ, এমনকি টিআইওও।
এরিক আউটগল্ফার

@ এরিকথগল্ফার এটি একটি ভাল ধারণা যেহেতু এটি অন্যান্য ব্যবহারের জন্য অযথা টিআইও কমিয়ে দেবে, তবে এটি ক্রাশ হবে না। সিস্টেমের স্মৃতিশক্তি শেষ হওয়ার সাথে সাথে প্রক্রিয়াটি সহজেই ওওএম দ্বারা নিহত হয়।
ডেনিস

5

Haskell,, 72 69 বাইট (কোন Regex)

g(a:b:c)|a==b=g c
g x=x==[]
any(g.words.concat).mapM(\c->[[c],c:" "])

একটি নিষ্ঠুর শক্তি পদ্ধতির। আইডিয়নে চেষ্টা করে দেখুন

-৩ বাইটের জন্য ব্ল্যাকক্যাপকে ধন্যবাদ।

ব্যাখ্যা

সহায়ক ফাংশনটি gস্ট্রিংগুলির একটি তালিকা নেয় এবং এটি পরীক্ষা করে থাকে যে এটিতে জোড়া জোড়া অভিন্ন স্ট্রিং রয়েছে ["aa","aa","bba","bba","ab","ab"]। (বেনামে) মূল ফাংশনটি সমস্ত সম্ভাব্য উপায়ে একটি স্ট্রিং বিভক্ত করে এবং এটি পরীক্ষা করে যে কমপক্ষে একটি বিভক্ত হওয়ার ফলে একটি তালিকা gগ্রহণ করে যা গ্রহণ করে।

g(a:b:c)                                  g on list with elements a, b and tail c,
        |a==b                              in the case that a==b,
             =g c                          recurses to the tail c.
g x=                                      g on any other list x
    x==[]                                  checks that x is empty.
                                           This includes the case where a is not equal
                                           to b, resulting in False.
any(g.words.concat).mapM(\c->[[c],c:" "]) The main function:
                    mapM(\c->[[c],c:" "])  Replace each letter c with either "c" or "c "
                                           in all possible ways, return list of results.
any(              ).                       Check that at least one result satisfies this:
            concat                          Concatenate the 1- or 2-letter strings,
      words.                                split again at each space,
    g.                                      apply g.

আপনি প্রতিস্থাপন করতে পারেন or.mapসঙ্গেany
BlackCap

@ ব্ল্যাকক্যাপ অবশ্যই, ধন্যবাদ! আমি প্রথমে ছিল any g.map(words.concat)ভাবলাম "গলফ হেই, আমি করতে পারেন anyথেকে or" ...
Zgarb

5

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

f=lambda s,t='':''<s>f(s[1:],t+s[0])|f(t and s)*f(t)>-(s==t)

আমি আশা করি এটি সঠিক। এটি বেশ ধীরে ধীরে চলে এবং এটিকে andসর্বোত্তম দেখাচ্ছে না।


1
আমি স্ট্রিংগুলি ব্যবহার করার চেষ্টা করেছি, তবে আমি আমার সূচক-ভিত্তিক স্কোরের কাছে কোথাও পৌঁছতে পারিনি। এটা আপনার এক চালাক and
ডেনিস

অভিনন্দন! বিভাজনে পুনরাবৃত্তি করা আমার মনে সেই কৌশল ছিল।
xnor

4

জেলি , 12 বাইট

ŒṖµœs€2ZEµ€S

আমার অন্যান্য উত্তরের চেয়ে দুটি বাইট দীর্ঘ , তবে এই পদ্ধতিটি অনেক বেশি দক্ষ এবং পরীক্ষার কেসগুলির একটি ছাড়া সমস্ত পরিচালনা করে।

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

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

ŒṖµœs€2ZEµ€S  Main link. Argument: s (string)

ŒṖ            Generate all partitions of s.
  µ      µ€   Map the monadic chain between the µ's over the partitions.
   œs€2         Split each string in the partition into two chunks of equal length.
       Z        Zip/transpose, collecting the first halves in one array and the
                second halves in another.
        E       Test the arrays of halves for equality.
           S  Return the sum of the results, counting the number of different
              ways s can be paired.

3

পাইথ - কোনও রেজেক্স নেই - 13 12 বাইট

পার্টিশনগুলির মধ্যে কোনওগুলি সমস্ত স্ট্রিং দিয়ে তৈরি করা হয় যা দুটি কেটে কাটলে একে অপরের সমান হয়।

sm.AqMcL2d./

টেস্ট স্যুট


3

ব্র্যাচল্যাগ , 14 বাইট (কোনও রেজেস নেই)

lye~l:1j@2zcc?

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

কিছু পরীক্ষার ক্ষেত্রে এটি খুব ধীর

ব্যাখ্যা

ly                  The list [0, …, length(Input)]
  e~l               A list whose length is an element of the previous list
     :1j            Append itself to this list
        @2zc        Split in half, zip and concatenate so that the list contains pairs of
                      consecutive identical elements
            c?      The concatenation of that list must result in the Input

3

জাভাস্ক্রিপ্ট (ইএস 6), কোনও রেজিপ্সপ, 75 74 বাইট নেই

f=s=>!s|[...s].some((_,i)=>i&&s[e='slice'](0,i)==s[e](i,i+=i)&&f(s[e](i)))

রিটার্নস 1pairable অন্যথায় জন্য 0। সম্পাদনা: @ বর্ধিত 1 বাইট ধন্যবাদ @ edc65।


নিস! substrপরিবর্তন না করে একই গণনা i। তবে sliceপুনরাবৃত্তি 3 বারের সাহায্যে আপনি এটি 1 বাইট
এলিয়াস করে

@ edc65 আপনি পরিবর্তন না করে কীভাবে একই গণনা পাবেন i? আমি বুঝতে পারি যে s.substr(i,i+i)এটির মতোই ফিরে আসে s.slice(i,i+=i)তবে আমি পরে পরিবর্তিত মানটি ব্যবহার করি i...
নীল

এটি s.substr(i,i)2 বাইট কম, তারপরে s.slice(i+i)2 বাইট আরও
edc65

@ edc65 ওহ অবশ্যই এটি আমার আরও কফির প্রয়োজন ...
নিল

3

পাইথন, 58 বাইট

f=lambda s,p='':s>''and(f(p)>-(s==p)<f(s))|f(s[1:],p+s[0])

এটি ডেনিসের পুনরাবৃত্ত পদ্ধতির উপর ভিত্তি করে । বুলিয়ান নেগেশন ট্রিকটি সেখান থেকে নেওয়া হয়েছে।

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


2

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

x=>/^((.+)\2)+$/.test(x)

সম্ভবত এটির চেয়ে ছোট হয় না।


তা কি হওয়া উচিত নয় \2?
নীল

@ নীল কিছু কারণে, আমি ভেবেছিলাম এটি কাজ করে \1তবে aabফিরে আসে true... সমাধানের জন্য ধন্যবাদ।
ETH প্রোডাকশনগুলি



1

র‌্যাকেট 230 বাইট

(let((sl string-length)(ss substring))(if(odd?(sl s))(printf ".~n")(begin(let p((s s))(if(equal? s "")(printf "!")
(for((i(range 1(add1(/(sl s)2)))))(when(equal?(ss s 0 i)(ss s i(* 2 i)))(p(ss s(* 2 i)(sl s)))))))(printf ".~n"))))

মুদ্রণ একটি '!' প্রতিটি ক্ষেত্রে স্ট্রিংটি যুক্তযোগ্য each মুদ্রণ একটি '।' শেষে.

Ungolfed:

(define (f s)
  (let ((sl string-length)                              ; create short names of built-in fns
        (ss substring))
    (if (odd? (sl s))  (printf ".~n")                   ; odd length strings cannot be pairable; end here.
        (begin
          (let loop ((s s))                             ; start testing here
            (if (equal? s "") (printf "!")              ; if no remaining string, it must be pairable
                (for ((i (range 1 (add1 (/(sl s)2)))))  ; ch lengths varying from 1 to half of string length
                  (when (equal? (ss s 0 i)              ; ch if substrings are same
                                (ss s i (* 2 i)))
                    (loop (ss s (* 2 i) (sl s) ))))))   ; if yes, loop to check remaining string.
          (printf ".~n")))))                            ; End of testing.

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

(println "Following should be pairable")
(f "bbaabbaa")            ; should produce 2 '!' since 2 ways are possible.
(f "aa")
(f "abaaba")
(f "bbababbb")
(f "aabaaababbbaba")
(f "babababa")                    ; should be pairable in 2 ways.
(f "bbbbbbbbbbbb")                ; should be pairable in many ways.
(f "aaababbabbabbbababbaabaabaababaaba")
(f "aaaabaab")
(println "Following should be unpairable")
; (f "a")
(f "ba")
(f "baab")
(f "abaabaaba")
(f "bbbbbbbbbbbbbbb")
(f "baababbabaaaab")
(f "aaaaabbaaaaa")

আউটপুট:

"Following should be pairable"
!!.
!.
!.
!.
!.
!!.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.
!.
!.
"Following should be unpairable"
.
.
.
.
.
.

1

পার্ল, 16 +2 = 18 বাইট (রিজেক্স সহ)

-nlপতাকা দিয়ে চালাও । -Eমুক্ত.

say/^((.+)\2)+$/

হিসাবে চালান:

perl -nlE 'say/^((.+)\2)+$/'

যুক্তযোগ্য, কুলযোগ্য না হলে নাল স্ট্রিংয়ের জন্য ক্যাপচার গ্রুপগুলির (একটি সত্যবাদী) একটি তালিকা প্রদান করে।

ব্যাখ্যা

-nlপতাকার একটি লুপ কোড (চালানো হবে -n,) (কারণ মুছে সম্পর্কে newline trailing ইনপুট নির্বাণ -lপরিবর্তনশীল মধ্যে) $_প্রতিটি সময়, তারপর কোড প্রতিটি সময় ইনপুট প্রবেশ করানো হয় মূল্যায়নের পর্যন্ত প্রোগ্রাম নিজে শেষ করা হয়। -Eপতাকা আপনি কমান্ড লাইন কোডটি মূল্যায়ন দেয় এবং সম্ভব sayকমান্ড।

say/^((.+)\2)+$/

   /^((.+)\2)+$/  #The regex engine
      (.+)\2      #Find any set of at least one character, followed by itself
     (      )+    #Do this at least one time
   /^         $/  #Make sure that this matches the entire string from start to end
say               #Output the result of the regex

যদি কোনও মিল খুঁজে পাওয়া যায় (উদাহরণস্বরূপ যদি স্ট্রিংটি যুক্তিযুক্ত হয়), তবে রেজেক্স ক্যাপচার গ্রুপগুলির একটি তালিকা ফিরিয়ে দেয়, যা সত্যবাদীর কাছে মূল্যায়ন করে, যার পরে পাস করা হয় sayএবং আউটপুট। যদি কোনও মিল খুঁজে পাওয়া যায় না, তবে রেজেক্স খালি স্ট্রিংটি ফিরিয়ে দেয়, যা মিথ্যাতে মূল্যায়ন করে, যা পরে পাস করা হয়say এবং আউটপুট।

নমুনা:

$ perl -nlE 'say/^((.+)\2)+$/'
aaababbabbabbbababbaabaabaababaaba
baababaababaaba                      #Truthy
baababbabaaaab
                                     #Falsy
bbababbb
bbb                                  #Truthy
aabaaababbbaba
bababa                               #Truthy
abaabaaba
                                     #Falsy

1

জিএনইউ প্রোলগ, 49 46 বাইট

সম্ভবত অন্যান্য রূপগুলিতেও কাজ করে, যদিও তারা সবাই স্ট্রিং একইভাবে উপস্থাপন করে না; জিএনইউ প্রোলোগের প্রতিনিধিত্ব এই সমস্যার জন্য দরকারী।

এটি স্পষ্ট নয় যে এটিকে রেজেক্স ব্যবহার হিসাবে গণ্য করা হয়েছে কি না। এটি কোনও রেজেক্স-জাতীয় বৈশিষ্ট্য ব্যবহার করছে না, তবে ভাষার সম্পূর্ণ শব্দার্থকগুলি রেজেক্সের মতো।

নতুন সংস্করণ (কিছু অন্যান্য উত্তরে দেখা যাওয়া পুনরাবৃত্তি কৌশলটি ব্যবহার করে):

s(X):-append(A,B,X),(A=B;A\=X,B\=X,s(A),s(B)).

পুরানো সংস্করণ:

s(X):-X=[];append(A,B,X),B\=X,append(C,C,A),s(B).

এটি একটি প্রাকটিক (কোনও ক্রিয়াকলাপের সমতুল্য) বলা হয় s, সম্পূর্ণ প্রোগ্রাম নয়। এটি এর মতো ব্যবহার করুন:

| ?- s("aa").
true ?
yes
| ?- s("aaababbabbabbbababbaabaabaababaaba").
true ?
yes
| ?- s("baababbabaaaab").
no
| ?- s("bbbbbbbbbbbbbbb").
no

পুরানো সমাধানটির একটি আকর্ষণীয় বৈশিষ্ট্যটি হ'ল আপনি যদি দোভাষীকে জিজ্ঞাসা করেন "আরও কি আরও সমাধান আছে?" ব্যবহারের মাধ্যমে ;true ?প্রম্পট, এটা ফেরৎ "সত্য" সময়ের একটি সংখ্যা বিভিন্ন উপায়ে সংখ্যা স্ট্রিং প্রকাশ করা যেতে পারে সমান (বরং জিজ্ঞাসা করার পরিবর্তে, প্রম্পটে প্রত্যাবর্তন টিপে মত আমি উপরের করেনি মাধ্যমে "কোন সমাধান") প্রদত্ত ফর্মটিতে (যেমন এটি "সত্য" এর সাথে দু'বার প্রত্যাবর্তন করে s("aaaa")., কারণ এটি হিসাবে (a a)(a a)বা হিসাবে পার্স করা যায় (aa aa))।

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


1

ব্রেইনফাক, 177 বাইট

+[<<<<,]>>>>[>+[>+[[>>]<+<[<<]>+>-]<[>+<-]>>>,>>[>>]+<<[<+>>-<-]<[>+<-]>>[,>[-<<
<<]<[<<<<]>]<[[<<]>]>>]>>[[>+>>>]>>>[>]<<<<[>+[-<<<,<]<[<<<[[<<<<]>>]<]>]>>]<[[-
>>>>]>>[<]<]<<]<.

বিন্যাসকৃত:

+[<<<<,]
>>>>
[
  >+
  [
    >+
    [
      [>>]
      <+<[<<]
      >+>-
    ]
    <[>+<-]>
    >>,>>[>>]
    +<<[<+> >-<-]
    <[>+<-]>
    >
    [
      not equal
      ,>[-<<<<]
      <[<<<<]
      >
    ]
    <
    [
      equal
      [<<]
      >
    ]
    >>
  ]
  >>
  [
    mismatch
    [>+>>>]
    >>>[>]
    <<<<
    [
      backtrack
      >+[-<<<,<]
      <
      [
        not done yet
        <<<
        [
          [<<<<]
          >>
        ]
        <
      ]
      >
    ]
    >>
  ]
  <
  [
    match
    [->>>>]
    >>[<]
    <
  ]
  <<
]
<.

কোনও পূর্ববর্তী নিউলাইন ছাড়াই ইনপুট আশা করে। \x00মিথ্যা এবং \x01সত্যের জন্য প্রিন্টগুলি ।

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

এটি গভীরতার প্রথম অনুসন্ধান প্রয়োগ করে। বিশেষত: বর্তমান প্রত্যয় থেকে শুরু করে বার বার বর্ধমান উপসর্গের জন্য পরীক্ষা করুন, যদি কোনও মিল খুঁজে পাওয়া যায় তবে পরবর্তী প্রত্যয়টিতে যান, অন্যথায় ব্যাকট্র্যাক।

শুরুতে, স্ট্রিংটি বিপরীত \x01হয় এবং শেষে একটি সেন্ডিনেল স্থাপন করা হয়।

টেপটি 4-সেল নোডে বিভক্ত। নোডের মেমরি বিন্যাসটি হ'ল:

c h x 0

cচরিত্রটি কোথায় , অক্ষরটি hপুনরাবৃত্ত উপসর্গের প্রথমার্ধে কিনা এটির জন্য xএটি একটি পতাকা এবং এটি বর্তমানের অক্ষরের সাথে জুটির তুলনা করার জন্য একটি পতাকা। hযখন পতাকার জায়গায় থাকার xপতাকা একটি চলমান উইন্ডো গঠন করে।

যদি স্ট্রিংটি যুক্তযোগ্য হয় তবে মূল লুপের শেষে পয়েন্টারটি সেন্ডিনেলের পাশে অবতরণ করে; অন্যথায়, ব্যাকট্র্যাক করার সময় পয়েন্টারটি স্ট্রিংয়ের বাম দিক থেকে পড়ে যায়।


1

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

~c~jᵐ

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

নোট করুন যে এই অ্যালগরিদমটি খুব দীর্ঘ সময় নিতে পারে , বিশেষত ভুয়া মামলার ক্ষেত্রে, যেহেতু এটি ইনপুট স্ট্রিংয়ের প্রতিটি সম্ভাব্য পার্টিশন পরীক্ষা করে।

ব্যাখ্যা

~c     Reversed concatenate: find a list that, when concatenated, results in the input string
       This examines all partitions of the input
  ~jᵐ  Map reversed juxtapose: for each string in that list, is it the result of concatenating
       a string to itself?

মত একটি ইনপুট স্ট্রিং এর জন্য "ababcc", ~cবিভিন্ন পার্টিশন চেষ্টা পর্যন্ত এটা আসে ["abab", "cc"], তখন ~jতালিকা, উভয় আইটেম জন্য সফল আউটপুট ["ab", "c"], এবং বিধেয় সফল।


1

আর , 31 বাইট

grepl("^((.+)\\2)+$",scan(,""))

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

রেটিনা উত্তরের উপর ভিত্তি করে।

আর , 129 বাইট

এবং এখানে একটি আসল, রেজিেক্স উত্তর নেই:

o=(y=utf8ToInt(scan(,"")))<0;for(i in 2*1:(sum(y>0)/2))for(j in 1:(i/2)){w=i:(i-j+1);v=w-j;if(all(y[w]==y[v]))o[c(v,w)]=T};all(o)

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


0

লিথপ , 57 টি অক্ষর

#S::((? (!= (null) (match S "^((.+)\\2)+$")) true false))

নমুনা ব্যবহার:

% pairable_strings.lithp
(
    (def f #S::((? (!= (null) (match S "^((.+)\\2)+$")) true false)))
    (print (f "aa"))
    (print (f "aabaaababbbaba"))
    (print (f "aaababbabbabbbababbaabaabaababaaba"))
    (print (f "ba"))
)

# ./run.js pairable_strings.lithp
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 2, type: 'Atom', name: 'true' }
AtomValue { value: 3, type: 'Atom', name: 'false' }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.