অ্যান্টিস্ট্রিং সঙ্কুচিত করুন


27

এই চ্যালেঞ্জে আপনাকে ইনপুট হিসাবে বর্ণানুক্রমিক স্ট্রিং দেওয়া হবে। আমরা প্রদত্ত ইনপুটটির "অ্যান্টি-স্ট্রিং" সংজ্ঞায়িত করব সমস্ত অক্ষরের বিপরীতে স্ট্রিং হতে। উদাহরণ স্বরূপ

AaBbbUy -> aAbBBuY

আপনার এমন একটি প্রোগ্রাম লিখতে হবে যা স্ট্রিংটিকে ইনপুট হিসাবে গ্রহণ করে এবং দীর্ঘতম মিলিত সাবস্ট্রিংয়ের সন্ধান করে যার অ্যান্টি-স্ট্রিংটিও একটি সংলগ্ন সাবস্ট্রিং। দুটি সাবস্ট্রিংগুলি ওভারল্যাপ করা উচিত নয়।

উদাহরণস্বরূপ যদি আপনাকে স্ট্রিং দেওয়া হয়

fAbbAcGfaBBagF

গা bold় অংশগুলি দীর্ঘতম স্ট্রিং এন্টি-স্ট্রিং জোড়া হবে।

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

fAbbAcGfaBBagF

হবে

fAcGfagF

দীর্ঘতম স্ট্রিং এন্টি-স্ট্রিং জুটি একক চরিত্র বা খাটো না হওয়া পর্যন্ত আপনার প্রোগ্রামটির প্রক্রিয়াটি পুনরাবৃত্তি করা উচিত।

উদাহরণস্বরূপ একই স্ট্রিংয়ের সাথে কাজ করা ধসের পরে নতুন দীর্ঘতম জুটি

fAcGfagF

সুতরাং আমরা আবার স্ট্রিং ভেঙে

fAcGag

স্ট্রিংটি আরও সঙ্কুচিত হতে পারে না সুতরাং আমাদের এটি আউটপুট করা উচিত।

প্রার্থীর জুটির মধ্যে টাইয়ের ক্ষেত্রে (উদাহরণস্বরূপ AvaVA) আপনি হ্রাস করতে পারেন ( AaAবা AvV, তবে নয় Aa)।

এটি তাই কম বাইট ভাল হওয়ার সাথে বাইটে উত্তরগুলি দেওয়া হবে।

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

fAbbAcGfaBBagF  ->  fAcGag
AvaVA ->  AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag

প্রণোদনা

যদিও এই সমস্যাটি নির্বিচারে মনে হতে পারে তবে এটি মূলত এমন একটি সমস্যা যা আমি মৌলিক বহুভুজগুলি প্রক্রিয়া করার কোড তৈরি করার সময় सामना করেছি। এই প্রক্রিয়াটি একটি মৌলিক বহুভুজকে একটি ছোট এন- ড্রাগনে হ্রাস করতে ব্যবহার করা যেতে পারে । আমি চেষ্টা করার পরে আমি ভেবেছিলাম এটি একটি সুন্দর ছোট গল্ফ তৈরি করবে।


অ্যান্টি-স্ট্রিং সাবস্ট্রিং সহ বৃহত্তম স্ট্রিংগুলিতে যদি একাধিক অ্যানিট-স্ট্রিং সাবস্ট্রিং থাকে তবে সমস্ত সাবস্ট্রিংগুলি ভেঙে দেওয়া উচিত বা কেবল প্রথম দুটি?
জোনাথন ফ্রেচ

পুনঃটুইট করুন এটি এমন একটি ক্ষেত্রে যেখানে প্রার্থী জুটির মধ্যে টাই রয়েছে।
গম উইজার্ড

তাহলে aaaAAAaaa -> aAaaa?
জোনাথন ফ্রেচ

এই সমস্যার একটি উপসেট সম্পর্কে কিছু চিৎকার করে তবে আমি এটিতে আঙুল রাখতে পারি না।
যাদু অক্টোপাস উরন

1
@ ম্যাজিক অ্যাক্টপাস ইউরন এর মতো কিছু একটি দ্বি-চক্রের কুইন লিখুন যেখানে প্রোগ্রামটির আউটপুট এটির বিরোধী ?
জোনাথন ফ্রেচ

উত্তর:


8

পার্ল, 64 61 বাইট

+1জন্য অন্তর্ভুক্তp

perl -pE 's/(.\K.{$%})(.*)(?=(.))(??{$1^$"x$%.$"})/$2$3/ while$%=--pos' <<< fAbbAcGfaBBagFaBBa

6

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

I / O এর জন্য অক্ষরের অ্যারে ব্যবহার করে।

f=a=>(m=M=C=>a.map((_,i)=>a.map((_,j)=>C(i,j-i+1))))(I=>M((i,j)=>a.slice(i,i+j).some((n,k)=>n[c='charCodeAt']()^(a[I+k]||'')[c]()^32)|I+j>i|j<m||(x=[i,I],m=j)))&&m-->1?f(a,x.map(p=>a.splice(p+1,m))):a

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


3

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

.+
$&¶$&
T`Ll`lL`.*¶
/(.).*¶.*\1/^&0A`
¶&Lv$`(?<=(.)*)((.)(.)*).*¶(?>((?<-1>.)*.)(?<-4>.)*)(.*)\2
$5$6$3$'
N$`
$.&
}0G`

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

.+
$&¶$&
T`Ll`lL`.*¶

ইনপুটটি সদৃশ করুন এবং প্রথম অনুলিপিটির ক্ষেত্রে ফ্লিপ করুন।

/(.).*¶.*\1/^&0A`

যদি কোনও অ্যান্টি-স্ট্রিং না থাকে তবে ফ্লিপড ডুপ্লিকেটটি মুছুন।

¶&Lv$`(?<=(.)*)((.)(.)*).*¶(?>((?<-1>.)*.)(?<-4>.)*)(.*)\2
$5$6$3$'

সমস্ত সম্ভাব্য ধসে পড়া এন্টি-স্ট্রিংগুলি তালিকাবদ্ধ করুন।

N$`
$.&
}0G`

এগুলির দৈর্ঘ্যের ক্রম অনুসারে বাছাই করুন, সংক্ষিপ্ততম (অর্থাৎ দীর্ঘতম এন্টি-স্ট্রিং) নিন এবং সমস্ত অ্যান্টি-স্ট্রিংগুলি ভেঙে ফেলা পর্যন্ত পুনরাবৃত্তি করুন।


3

পাইথন 3 , 189 181 বাইট

খাঁটি ওয়ান-লাইনার তৈরির জন্য জোনাথন ফ্রেঞ্চকে কৃতিত্ব।

f=lambda s,x=set():any(u in s[j+i:]and(x.add(s[:j+1]+s[j+i:].replace(u,u[0],1))or 1)for i in range(len(s),1,-1)for j in range(len(s))for u in[s[j:j+i].swapcase()])and f(x.pop())or s

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

আমার নিজস্ব সংস্করণ, এখন অপ্রচলিত (189 বাইট):

x=set()
def f(s):
 while any(u in s[j+i:]and(x.add(s[:j+1]+s[j+i:].replace(u,u[0],1))or 1)for i in range(len(s),1,-1)for j in range(len(s))for u in[s[j:j+i].swapcase()]):s=x.pop()
 return s

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

any()নেস্টেড লুপগুলি তাড়াতাড়ি set()ছিন্ন করতে এবং বোধগম্যভাবে পরিবর্তনীয় গ্লোবাল অবজেক্টের জন্য ব্যবহারযোগ্য। বাকিগুলি হ'ল প্রয়োজনীয়তাগুলি সরাসরি ব্যবহার করে str.swapcase

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

def f(s):
 for i in range(len(s),1,-1):
	for j in range(len(s)):
	 u=s[j:j+i].swapcase()
	 if u in s[j+i:]:return f(s[:j+1]+s[j+i:].replace(u,u[0],1))
 return s

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

সরিয়ে ফেলা হয়েছে যে নিয়মিত নেস্ট করা খুব তাড়াতাড়ি ব্রেকিং দিয়ে লুপের জন্য return"চালাক" কৌশলটির চেয়ে ছোট any


181 বাইট ; পুনরাবৃত্তি পদ্ধতির setফাংশন ডিফল্ট হিসাবে পরিবর্তনীয় আরও কলগুলির সাথে সংঘর্ষ ঘটবে না, কারণ আমি মনে করি আপনার কোডটি পুরোপুরি খালি সেটটিকে পপ করে।
জোনাথন ফ্রেচ

দুঃখিত, আমি ভেবেছিলাম যে xখালি না রেখে পিছনে থাকবে। আপনার কাছে যেমন রয়েছে, আমার মনে হয় এটি মেনে চলে।
জোনাথন ফ্রেচ

ঠিক আছে, এবং উন্নতির জন্য ধন্যবাদ।
বুদ্বুদ

3

সি (জিসিসি) , 240 238 227 225 222 216 বাইট

  • দুটি বাইট সংরক্ষণ করা; একটি স্ট্রে ভেরিয়েবল সংজ্ঞা মুছে ফেলা হয়েছে।
  • সংরক্ষিত এগারো তেরো বাইট; golfed b|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64করার b|=abs(S[p+m]-S[q+m])-32জন্য b|=32-S[p+m]+S[q+m]&63
  • তিনটি বাইট সংরক্ষণ করা; golfed for(...;...;p++)S[p+1]=S[p+L];করতে for(...;...;S[++p]=S[p+L]);
  • সিলিংক্যাট ধন্যবাদ ছয় বাইট সংরক্ষণ করা
p,P,q,Q,l,L,b,m;f(char*S){for(p=0;S[p];p++)for(l=0;S[l+++p];)for(q=0;b=S[q+~-l];!b&p+l<=q&l>L?L=l,P=p,Q=q:0,q++)for(b=0,m=l;m--;)b|=32-S[p+m]+S[q+m]&63;for(;b-2;)for(p=b++?-~Q-L:P;S[p];S[++p]=S[L+p]);~-L?L=0,f(S):0;}

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


আপনাকে ধন্যবাদ
জোনাথন ফ্রেচ


0

স্ট্যাক্স , 30 বাইট

î☼fúΩ§☺æ╒ºê@Ñ▀'╫Iqa{d]∟Sa5♦⌂─╚

এটি চালান এবং এটি ডিবাগ করুন

একই প্রোগ্রামটির সংশ্লিষ্ট আসকি উপস্থাপনাটি এটি।

c%Dc:e{%orF..*:{_{32|^mY++_h.$1yh++R

এটি একটি রেজেক্স পদ্ধতির ব্যবহার করে। এটি বার বার স্ট্রিং প্রতিস্থাপন। এটি বর্তমান মানের প্রতিটি সংলগ্ন সাবস্ট্রিং থেকে এগুলি তৈরি করে। ইনপুটটির উদাহরণস্বরূপ fAbbAcGfaBBagF, সাবস্ট্রিংগুলির মধ্যে একটি হ'ল AbbA, সেই ক্ষেত্রে রেজেেক্সটি AbbA(.*)aBBaপ্রতিস্থাপন করা হবে A$1a

c                                       get number of characters
 %D                                     repeat rest of program that many times
   c:e                                  get all substrings
      {%or                              order substrings longest to shortest
          F                             for each substring, execute the rest
           ..*:{                        build the string "(.*)"
                _{32|^m                 current substring with case inverted
                       Y                save the inverted case in register y
                        ++              concatenate search regex together
                                            e.g. "aBc(.*)AbC"
                          _h            first character of substring
                            .$1         "$1"
                               yh       first character of inverted case
                                 ++     concatenate replacement regex together
                                            e.g. "a$1A"
                                   R    do regex replacement


0

জাপট -h , 33 বাইট

à ñÊÅÔ£=rX+"(.*)"+Xc^H ÈÎ+Y+XÎc^H

চেষ্টা করে দেখুন

à ñÊÅÔ£=rX+"(.*)"+Xc^H ÈÎ+Y+XÎc^H     :Implicit input of string U
à                                     :Combinations
  ñ                                   :Sort by
   Ê                                  :  Length
    Å                                 :Remove first element (the empty string)
     Ô                                :Reverse
      £                               :Map each X
       =                              :  Reassign to U
        r                             :  Global replacement
         X+"(.*)"+                    :  Append "(.*)" to X and then append
                  Xc                  :    Charcodes of X
                    ^H                :    XORed with 32
                      È               :  Pass each match X, with captured group Y, through the following function
                       Î+Y+           :    Append Y to the first character of X and then append
                           XÎc^H      :      The charcode of the first character of X XORed with 32
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.