আসল সমাধান: জাভাস্ক্রিপ্ট - 261 255 228 227 179 153 অক্ষর
/(\d)(\1(\d|.{6}|.{9})|(\d|.{6}|.{9})\1|.{7}\1(.|.{9})|(.|.{9})\1.{7}|(.{7,9}|.{17})\1.{8}|.{8}\1(.{7,9}|.{17}))\1/.test(s.replace(/\n/g,'A'))?'yes':'no'
Assuming যে পরীক্ষা স্ট্রিং পরিবর্তনশীল হয় s
(এটা একটি ফাংশন করতে f
তারপর যোগ f=s=>
একটি প্রম্পট থেকে ইনপুট নিতে তারপর প্রতিস্থাপন, কোড বা শুরুতে অন্যথায়, s
সঙ্গে prompt()
)।
আউটপুট কনসোল হয়।
3 য় সমাধান: জাভাস্ক্রিপ্ট (ECMAScript 6) - 178 টি অক্ষর
p=x=>parseInt(x,36);for(t="2313ab1b8a2a78188h9haj9j8iaiir9r",i=v=0;s[i];i++)for(j=0;t[j];v|=s[i]==s[i+a]&s[i]==s[i+b]&i%9<8&(b>3|(i+b-a)%9<8))a=p(t[j++]),b=p(t[j++]);v?'yes':'no'
আমি নীচে 2 তম সমাধানটি নিয়েছি (যা নির্দিষ্ট কনফিগারেশনে অক্ষরগুলি পরীক্ষা করার জন্য নিয়মিত এক্সপ্রেশন ব্যবহার করে) এবং নিয়মিত এক্সপ্রেশন না ব্যবহার করে একই কনফিগারেশনে অভিন্ন অক্ষরের জন্য স্ট্রিংটি পরীক্ষা করতে পুনরায় কাজ করেছি।
বেস-36 string স্ট্রিং "2313ab1b8a2a78188h9haj9j8iaiir9r"
জোড় অফসেটগুলি যাচাই করতে দেয় - উদাহরণস্বরূপ, জোড় যাচাইয়ের 23
ফলাফল দেয় যদি আমি তম অক্ষর (i + 2) তম অক্ষর এবং (i + 3) তম অক্ষর (নিয়মিত প্রকাশের সমতুল্য ) (.).\1\1
- অ-অভিন্ন চরিত্রটি কোনও নতুন লাইন নয় তা নিশ্চিত করার জন্য কিছু অতিরিক্ত চেক সহ)।
2 তম সমাধান: জাভাস্ক্রিপ্ট (ECMAScript 6) - 204 অক্ষর
p=x=>parseInt(x,18);g=a=>a?a>1?"(.|\\n){"+a+"}":".":"";f=(x,a,b)=>RegExp("(.)"+g(a)+"\\1"+g(b)+"\\1").test(x);for(t="10907160789879h8",i=v=0;t[i];v|=f(s,x,y)||f(s,y,x))x=p(t[i++]),y=p(t[i++]);v?'yes':'no'
বেস -18 স্ট্রিং থেকে নেওয়া বিভিন্ন সংখ্যক মান ব্যবহার করে একাধিক নিয়মিত অভিব্যক্তি (আরও তথ্যের জন্য নীচে দেখুন) তৈরি করে 10907160789879h8
এবং OR
সমস্ত পরীক্ষার পরীক্ষা নেয় । এটিকে আরও কমাতে আপনি নোট করতে পারেন যে নিয়মিত প্রকাশগুলি জোড়ায় আসে যেখানে একজনের অপরটির "বিপরীত" হয় (নিয়মিত এক্সপ্রেশনগুলিকে 3-ইন-সারি জন্য অনুভূমিকভাবে এবং উলম্বভাবে ওপি হিসাবে বলা হয় যে তারা কখনই উপস্থিত থাকবে না - আপনি যদি সেই পরীক্ষাগুলি 0088
বেস -18 স্ট্রিং- এ সংযোজন করতে চান তবে।
ব্যাখ্যা
বৈধ পদক্ষেপের সমস্ত সম্ভাব্য কনফিগারেশনগুলিকে কভার করে নিয়মিত 16 টি অভিব্যক্তি দিয়ে শুরু করুন:
REs=[
/(\d)\1\1/, // 3-in-a-row horizontally
/(\d).\1\1/, // 3-in-a-row horizontally after left-most shifts right
/(\d)\1.\1/, // 3-in-a-row horizontally after right-most shifts left
/(\d)(?:.|\n){9}\1\1/, // 3-in-a-row horizontally after left-most shifts down
/(\d)(?:.|\n){7}\1.\1/, // 3-in-a-row horizontally after middle shifts down
/(\d)(?:.|\n){6}\1\1/, // 3-in-a-row horizontally after right-most shifts down
/(\d)\1(?:.|\n){6}\1/, // 3-in-a-row horizontally after left-most shifts up
/(\d).\1(?:.|\n){7}\1/, // 3-in-a-row horizontally after middle shifts up
/(\d)\1(?:.|\n){9}\1/, // 3-in-a-row horizontally after right-most shifts up
/(\d)(?:.|\n){7,9}\1(?:.|\n){8}\1/, // 3-in-a-row vertically (with optional top shifting left or right)
/(\d)(?:.|\n){7}\1(?:.|\n){9}\1/, // 3-in-a-row vertically after middle shifts right
/(\d)(?:.|\n){9}\1(?:.|\n){7}\1/, // 3-in-a-row vertically after middle shifts left
/(\d)(?:.|\n){8}\1(?:.|\n){7}\1/, // 3-in-a-row vertically after bottom shifts right
/(\d)(?:.|\n){8}\1(?:.|\n){9}\1/, // 3-in-a-row vertically after bottom shifts left
/(\d)(?:.|\n){17}\1(?:.|\n){8}\1/, // 3-in-a-row vertically after top shifts down
/(\d)(?:.|\n){8}\1(?:.|\n){17}\1/, // 3-in-a-row vertically after bottom shifts up
];
( দ্রষ্টব্য: 3-ইন-এ-সারি আনুভূমিকভাবে (0 ম ) এবং উল্লম্বভাবে (9 ম অংশ ) অপ্রাসঙ্গিক কারণ ওপি বলেছে যে এইগুলির সাথে মেলে ইনপুটগুলি কখনই উপস্থিত হবে না ))
ইনপুটটির বিপরীতে তাদের প্রত্যেকটির পরীক্ষা করা নির্ধারণ করবে যে সেই কনফিগারেশনের কোনও বৈধ পদক্ষেপ পাওয়া যাবে কিনা।
যাইহোক, নিয়মিত প্রকাশগুলি এই 6 টি প্রদানের জন্য একত্রিত হতে পারে:
/(\d)(?:.|(?:.|\n){9}|(?:.|\n){6})?\1\1/ // Tests 0,1,3,5
/(\d)\1(?:.|(?:.|\n){9}|(?:.|\n){6})?\1/ // Tests 0,2,6,8
/(\d)(?:.|\n){7}\1(?:.|(?:.|\n){9})\1/ // Tests 4,10
/(\d)(?:.|(?:.|\n){9})\1(?:.|\n){7}\1/ // Tests 7,11
/(\d)(?:(?:.|\n){7,9}|(?:.|\n){17})\1(?:.|\n){8}\1/ // Tests 9,14
/(\d)(?:.|\n){8}\1(?:(?:.|\n){7,9}|(?:.|\n){17})\1/ // Tests 9a,12,13,15
এরপরে এগুলি একক নিয়মিত অভিব্যক্তিতে সংযুক্ত করা যায়:
/(\d)(?:.|(?:.|\n){9}|(?:.|\n){6})?\1\1|(\d)\2(?:.|(?:.|\n){9}|(?:.|\n){6})?\2|(\d)(?:.|\n){7}\3(?:.|(?:.|\n){9})\3|(\d)(?:.|(?:.|\n){9})\4(?:.|\n){7}\4|(\d)(?:(?:.|\n){7,9}|(?:.|\n){17})\5(?:.|\n){8}\5|(\d)(?:.|\n){8}\6(?:(?:.|\n){7,9}|(?:.|\n){17})\6/
যা শুধু ইনপুট বিরুদ্ধে পরীক্ষা করা প্রয়োজন।
পরীক্ষার মামলা
কিছু টেস্ট কেস যা অন্যান্য লোকেরা দরকারী খুঁজে পেতে পারে (কেবলমাত্র 1-7 সংখ্যা ব্যবহারের ইনপুট বিন্যাসের সাথে সম্মতি দেয় না তবে এটি সহজেই সংশোধন করা হয় এবং এটি কেবল একটি 8x4 গ্রিড - যেহেতু সমস্ত বৈধ ইনপুটগুলির পরীক্ষার জন্য এটি ন্যূনতম )।
ইনপুট স্ট্রিং থেকে কোনও মানচিত্রের ফর্ম্যাটে এটির উপরে 16 টি নিয়মিত এক্সপ্রেশন মেলে matches
Tests={
"12345678\n34567812\n56781234\n78123456": -1, // No Match
"12345678\n34969912\n56781234\n78123456": 1, // 3-in-a-row horizontally after left-most shifts right
"12345678\n34567812\n59989234\n78123456": 2, // 3-in-a-row horizontally after right-most shifts left
"12345978\n34567899\n56781234\n78123456": 3, // 3-in-a-row horizontally after left-most shifts down
"12345978\n34569892\n56781234\n78123456": 4, // 3-in-a-row horizontally after middle shifts down
"12345678\n34967812\n99781234\n78123456": 5, // 3-in-a-row horizontally after right-most shifts down
"12399678\n34967812\n56781234\n78123456": 6, // 3-in-a-row horizontally after left-most shifts up
"12345678\n34597912\n56789234\n78123456": 7, // 3-in-a-row horizontally after middle shifts up
"12345998\n34567819\n56781234\n78123456": 8, // 3-in-a-row horizontally after right-most shifts up
"12945678\n34597812\n56791234\n78123456": 9, // 3-in-a-row vertically after top shifts right
"12349678\n34597812\n56791234\n78123456": 9, // 3-in-a-row vertically after top shifts left
"12345978\n34569812\n56781934\n78123456": 10, // 3-in-a-row vertically after middle shifts right
"92345678\n39567812\n96781234\n78123456": 11, // 3-in-a-row vertically after middle shifts left
"12945678\n34967812\n59781234\n78123456": 12, // 3-in-a-row vertically after bottom shifts right
"12349678\n34569812\n56781934\n78123456": 13, // 3-in-a-row vertically after bottom shifts left
"12395678\n34567812\n56791234\n78193456": 14, // 3-in-a-row vertically after top shifts down
"12345698\n34567892\n56781234\n78123496": 15, // 3-in-a-row vertically after bottom shifts up
"12345678\n34567899\n96781234\n78123456": -1, // No match - Matches (.)\1.\1 but not 3 in a row
"12345679\n99567812\n56781234\n78123456": -1, // No match - Matches (.).\1\1 but not 3 in a row
};
সম্পাদনা 1
\d
এর সাথে এস প্রতিস্থাপন করুন .
- 6 টি অক্ষর সংরক্ষণ করে।
সম্পাদনা 2
অতিরিক্ত নন-ক্যাপচারিং গ্রুপগুলি এবং অপসারণ ব্যাক রেফারেন্সগুলি ( এম-বেটনার দ্বারা প্রস্তাবিত ) এর (?:.|\n)
সাথে প্রতিস্থাপন করুন [\s\S]
এবং হ্যাঁ / কোনও আউটপুট যুক্ত করা হবে।
সম্পাদনা 3
- বেস -18 স্ট্রিং থেকে স্বতন্ত্র নিয়মিত এক্সপ্রেশনগুলি তৈরি করতে ECMAScript 6 সমাধান যুক্ত করা হয়েছে।
- অনুভূমিকভাবে 3-ইন-এ-সারিটির জন্য পরীক্ষাগুলি সরানো হয়েছে ( এম-বাটনার দ্বারা প্রস্তাবিত )।
সম্পাদনা 4
আরও একটি (সংক্ষিপ্ত) সমাধান এবং আরও দুটি মিল নেই টেস্টের কেস।
সম্পাদনা করুন 5
- সংখ্যাসূচক অক্ষর ( ভাদিমআর দ্বারা প্রস্তাবিত ) দিয়ে নিউলাইনগুলি প্রতিস্থাপন করে সংক্ষিপ্ত মূল সমাধানটি ।
সম্পাদনা 6
- নিয়মিত অভিব্যক্তির বিটগুলিকে একত্রিত করে (মূলত ভাদিমআর দ্বারা প্রস্তাবিত ) সংক্ষিপ্ত মূল সমাধান ।