ড্যাক্ট টেপ একটি রেজেক্স ডেসিডার


11

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

এই চ্যালেঞ্জের উদ্দেশ্যে, রেগুলার এক্সপ্রেশন উপভাষা মেটা-অক্ষরের একটি সেট ছিনতাই নিচে এবং বেশিরভাগ সংক্ষিপ্ত হতে হবে: ()*?|\। এর মতো, আপনি বিল্ট-ইন রেজেক্স পার্সার ব্যবহার করতে সক্ষম হবেন না।

  • \মেটা-চরিত্রগুলি এড়ানোর জন্য ব্যবহৃত হয়। এটি অবশ্যই একটি মেটা-চরিত্র দ্বারা অনুসরণ করা উচিত।
  • আনসকেপড বন্ধনীগুলি অবশ্যই ভারসাম্যপূর্ণ হবে
  • *এবং ?অবশ্যই একটি মেটা-অক্ষর, একটি প্রথম বন্ধনী গোষ্ঠী, বা একটি পালিয়ে যাওয়া মেটা-চরিত্র দ্বারা আবশ্যক।
  • অন্যান্য সমস্ত মুদ্রণযোগ্য ASCII অক্ষর প্লাস নিউলাইন, ট্যাব এবং স্পেসকে নন-মেটা অক্ষর হিসাবে সমর্থন করতে হবে। অন্যান্য অক্ষরযুক্ত স্ট্রিংয়ের সাথে কী ঘটে তা অপরিজ্ঞাত।
  • এই চ্যালেঞ্জের জন্য রেজেক্সের আসল অর্থটি গুরুত্বপূর্ণ নয়।

উদাহরণ

Truthy:
  abc
  a?
  (a|)*
  ()
  a|b*
  \*
  \\
  \\*
  a*b?(cd|e)
  +
  [
  }
  (123\))*
  \|
  (a(b(c|d)*e)*f)*
  (|\)*)
  (abc)+*
  (abc)+
  +abc

^ last test case is an actual newline

Falsy:
  ?abc
  *
  **
  \
  (
  a*?
  a?*
  ?
  a)
  (\)
  (|\)*
  \()
  |*
  (?:abc)
  \\**
  \n

স্কোরিং

আপনার সামগ্রিক স্কোরটি স্ট্যাকএক্সচেঞ্জের আশেপাশে প্রশ্ন ও উত্তর থেকে নেওয়া স্নিপেটের সংখ্যা।

  • বারবার স্নিপেটগুলি যতবার ব্যবহৃত হয় ততবার গণনা করে।
  • হোয়াইটস্পেস নিখরচায় যোগ এবং সরানো যেতে পারে (পাইথন, হাস্কেল এবং অন্যান্য হোয়াইটস্পেস-সংবেদনশীল ভাষার কারণে) এবং আপনার স্নিপেটের গণনা বিবেচনা করে না।
  • এই চ্যালেঞ্জের চেয়ে কোনও স্ট্যাকএক্সচেঞ্জ সাইট থেকে স্নিপেটগুলি অনুমতি দেওয়া হয় যতক্ষণ না তারা প্রশ্ন, উত্তর এবং পুরানো মন্তব্যগুলি (যতক্ষণ না সম্পাদনার সময় সহ - যদি প্রয়োজনে পুরানো সংশোধনগুলি ব্যবহার করে) থেকে আসে। (সেপ্টেম্বর 24, 2019 @ 3:30 অপরাহ্ন ইউটিসি)
  • স্নিপেটগুলি কোনও প্রশ্ন, উত্তর, বা মন্তব্য বডি থেকে যে কোনও জায়গা থেকে আসতে পারে, তা প্রিম্প্রেটেড কোড ব্লকের মধ্যে রয়েছে কিনা।
  • অন্যটির মাঝে একটি স্নিপেট ছড়িয়ে দেওয়ার ফলে বাইরের স্নিপেটকে দুটি স্নিপেট হিসাবে গণনা করা হয়

সর্বনিম্ন স্কোর জয়!


1
@ রবিনরাইডার হ্যাঁ, পরিবর্তিত হয়েছে
বিফাস্টার

পোস্টটি কি এই চ্যালেঞ্জের চেয়ে পুরানো বা সমান হতে পারে, অর্থাৎ আমরা কি এই চ্যালেঞ্জের মূল অংশ থেকে স্নিপেট ব্যবহার করতে পারি?
জো কিং

1
"যেমন, আপনি বিল্ট-ইন রেজেক্স পার্সার ব্যবহার করতে সক্ষম হবেন না" এটি কি এটি সরল ইয়া / নায়ের জন্য এটির ব্যবহারকে ব্যর্থ করার জন্য ডিজাইন করা হয়েছে, বা আমাদের জবাবগুলিতে একেবারে রেজেক্স ব্যবহার করা নিষিদ্ধ?
user0721090601

@ গুইফা এটির নকশা তৈরি করা হয়েছে যাতে আপনি কেবল আপনার ভাষার রেজেক্স ইঞ্জিন নিতে পারবেন না এবং প্রদত্ত রেজেক্সটি সংকলন করে কিনা তা দেখতে পারেন। আমার জানা প্রত্যেকটি ভাষা মেটা-অক্ষর এবং বিশেষায়িত ক্যাপচার গ্রুপগুলির বৃহত্তর সেটকে সমর্থন করে, তাই তারা অক্ষরগুলির এই সেটটি সব ক্ষেত্রে সঠিকভাবে মেলে না।
বিফস্টার

1
@ জেএল 2210 এটি দুটি স্নিপেট তৈরি করবে: একটি শুরুতে এবং শেষের জন্য একটি। যতক্ষণ না এটি সমস্ত পরীক্ষার কেস পাস করে এবং একটি উত্তর / প্রশ্ন / পোস্ট থেকে আসে যেটি এই চ্যালেঞ্জের চেয়ে পুরনো
বিফস্টার

উত্তর:


6

পার্ল 6 , 20 স্নিপেটস

{$_ eq m/[[<-[()*?|\\]>|\\<[()*?|\\]>|'(' <~~>* ')']<[*?]>?|\|]+/}

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

স্নিপেটগুলি নেওয়া হয়েছে:

{$_ eq, m/[, <-[, ()*?, |\\, ]>, |\\, <[, ()*?, |\\, ]>, |, '(' <~~>* ')', <[, *?, ]>, ?|, \|, ]+/, }

এটি বেশিরভাগই লোভী দৃষ্টিভঙ্গি (সমস্ত এক বা দুটি চরিত্রের স্নিপেট দ্বারা স্পষ্ট করে দেওয়া)। আমি স্বতন্ত্র চরিত্রগুলির সন্ধান করতে সিম্বলহাউন্ড ব্যবহার করেছি এবং একমাত্র আসল অপ্টিমাইজেশনটি ছিল '(' <~~>* ')'স্নিপেট, যা আমার নিজের উত্তর থেকে পুনরাবৃত্ত পার্ল re রেজেক্সসে নেওয়া হয়েছিল।

ব্যাখ্যা:

এটি মূলত যাচাই করে যে ইনপুটটি কোনও বৈধ রেজেক্সের লোভী মিলের সমান কিনা। আমরা কেবলমাত্র রেজেক্স নিজেই ব্যবহার করতে এবং ^$শেষগুলি চিহ্নিত করতে না পারার কারণ হ'ল আমরা একটি পুনরাবৃত্তীকরণের রেইগেক্স ব্যবহার করছি, যা ^$চিহ্নিতকারী থাকলে কাজ করবে না । রেজেক্স নিজেই:

m/[                             ]+/   # Match one or more times
   [              ]  # Any of 
    <-[()*?|\\]> |     # Not a metacharacter
    \\<[()*?|\\]>      # A metacharacter preceded by a \
    '(' <~~>* ')'      # Brackets surrounding a valid regex
                   <[*?]>?  # Optionally followed by a ? or *
                           | \|    # Or just the | metacharacter

তিল ~~, ধন্যবাদ!
user0721090601

@ গিফা হ্যাঁ, আমি শিখেছি পি 6 স্পেসিফিকেশনের মাধ্যমে , যার অনেকগুলি জিনিস রয়েছে যা এখনও সঠিকভাবে নথিভুক্ত হয়নি। আমার সন্দেহ ~~হয় যে এটি এখনও পুরোপুরি বাস্তবায়িত হয়নি (উদাহরণস্বরূপ <~~0>), যদিও সেখানে অন্যান্য লুকানো রত্ন রয়েছে appear
জো কিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.