রেটিনা , 61 55 বাইট
^((.)(?<!\2.+))*((){7}((?<-4>)(.)(?!(?<-4>.)*\4\6))*)*$
যেহেতু এটি কেবলমাত্র একটি একক রেজেক্স, রেটিনা ম্যাচ মোডে চলবে এবং এটি মিলবে এমন মিলগুলির সংখ্যা প্রতিবেদন করবে যা 1
বৈধ ক্রম এবং 0
অন্যথায় হবে will গল্ফিং ভাষাগুলির সাথে এটি তুলনামূলক নয়, তবে 260 বাইটের দৈত্য দিয়ে শুরু করে দেখে আমি এতে বেশ খুশি।
ব্যাখ্যা
^((.)(?<!\2.+))*
এই বিটটি পরিবর্তনশীল দৈর্ঘ্যের স্বতন্ত্র অক্ষরের একটি উপসর্গ গ্রহণ করে, এটি সম্ভাব্য অসম্পূর্ণ নেতৃস্থানীয় অংশের সাথে মেলে। নজরদারিটি নিশ্চিত করে যে এই বিটের সাথে মেলে এমন কোনও চরিত্র এর আগে স্ট্রিংয়ে হাজির হয়নি।
এখন বাকি ইনপুটটির জন্য, আমরা অক্ষরের পুনরাবৃত্তি না করে of টির সাথে মিল রাখতে চাই match আমরা এই জাতীয় খণ্ডের সাথে মিল রাখতে পারি:
(.)(?!.{0,5}\1)(.)(?!.{0,4}\2)(.)(?!.{0,3}\3)...(.)(?!.?\5).
অর্থাৎ আমরা এমন একটি চরিত্রের সাথে মেলে যা অন্য 6 টি অক্ষরের জন্য প্রদর্শিত না হয়, তারপরে এমন একটি যা অন্য 5 টি অক্ষরের জন্য প্রদর্শিত না হয় এবং এরকম আরও কিছু। তবে এর জন্য মোটামুটি ভয়াবহ কোড পুনরাবৃত্তি প্রয়োজন এবং আমাদের আলাদাভাবে একটি ট্রেলিং (সম্ভাব্য অসম্পূর্ণ) খণ্ডটি মিলাতে হবে।
দলগুলোকে উদ্ধারে উদ্ধার! মেলানোর আলাদা উপায়
(.)(?!.{0,5}\1)
হ'ল 5 টি খালি ম্যাচ ক্যাপচার স্ট্যাকের দিকে ঠেলে এবং এটি খালি করার চেষ্টা করুন:
(){5}(.)(?!(?<-1>.)*\2)
*
শূন্য পুনরাবৃত্তির কমপক্ষে পারবেন, ঠিক {0,5}
, এবং কারণ আমরা পাঁচটি যেমনটি ধাক্কা করেছি, এটা হয় চেয়ে বেশি 5 বার পপ সক্ষম হবে না। এটি এই প্যাটার্নের একক উদাহরণের জন্য দীর্ঘতর তবে এটি আরও পুনরায় ব্যবহারযোগ্য। যেহেতু আমরা নেতিবাচক চেহারাতে পপিং করছি , সুতরাং একবার চেহারা শেষ হয়ে গেলে এটি আসল স্ট্যাককে প্রভাবিত করবে না। তাকাবার পরে, আমরা এখনও স্ট্যাকের মধ্যে 5 টি উপাদান পেয়েছি, ভিতরে কী ঘটেছে তা বিবেচনা করুন। তদ্ব্যতীত, আমরা প্রতিটি ত্রুটিযুক্ত লোকের আগে স্ট্যাক থেকে কেবল একটি উপাদান পপ করতে পারি, এবং একটি লুপে কোডটি চালাতে পারি, যাতে স্বয়ংক্রিয়ভাবে চূড়ান্ত প্রস্থটি 5 থেকে নীচে 0 পর্যন্ত হ্রাস করা যায় So সুতরাং সেখানে দীর্ঘতর বিট আপ আসলে সংক্ষিপ্ত করা যেতে পারে
(){7}((?<-1>)(.)(?!(?<-1>.)*\1\3))*
(আপনি দুটি পার্থক্য লক্ষ্য করতে পারেন: আমরা 5 এর পরিবর্তে 7 চাপ দিচ্ছি One একটি অতিরিক্ত ক্যাপচার কারণ আমরা প্রতিটি পুনরাবৃত্তির আগে পপ করি , তার পরে নয় The অন্যটি আসলে প্রয়োজনীয় যাতে আমরা times বার স্ট্যাক থেকে পপ করতে পারি (যেহেতু আমরা চাই লুপটি times বার চালানোর জন্য), আমরা \1
স্ট্যাকের মধ্যে কমপক্ষে একটি উপাদান এখনও রয়ে গেছে তা নিশ্চিত করে লুপহেডের অভ্যন্তরে একের পর এক ত্রুটিটি ঠিক করতে পারি ))
এর সৌন্দর্য এটি হ'ল এটিও শেষের অসম্পূর্ণ খণ্ডটির সাথে মিলে যায়, কারণ আমাদের কখনই এটি 7 বার পুনরাবৃত্তি করার প্রয়োজন হয়নি (এটি কেবলমাত্র সর্বোচ্চ প্রয়োজনীয়, কারণ আমরা স্ট্যাক থেকে প্রায়শই পপ করতে পারি না)। সুতরাং আমাদের যা করতে হবে তা হ'ল এটি অন্য লুপে মোড়ানো এবং এটি নিশ্চিত করার জন্য আমরা স্ট্রিংয়ের শেষে পৌঁছেছি
^((.)(?<!\2.+))*((){7}((?<-4>)(.)(?!(?<-4>.)*\4\6))*)*$