আদেশের সাথে মিল!


15

আপনার চ্যালেঞ্জটি হ'ল একটি রেজেক্স তৈরি করা যা নিজের প্রতিটি স্ট্রিং ক্রমশক্তিটির সাথে মেলে এবং অন্য কিছুই। ম্যাচটি অবশ্যই কেস-সংবেদনশীল হতে হবে।

সুতরাং, উদাহরণস্বরূপ, যদি আপনার রেজেক্স হয়:

ABC

এটি এই স্ট্রিংগুলির সাথে মিলবে (এবং কেবল মিলবে):

ABC
ACB
BAC
BCA
CAB
CBA

এটি এর মতো জিনিসের সাথে মেলে না:

AABC (contains an extra A)
ABCD (contains an extra D)
AC   (no B)
AAA  (no B and C, extra 2 A's)
abc  (case-sensitive)

নিয়মাবলী:

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



আমি ভেবেছিলাম (ABC|ACB|BAC|BCA|CAB|CBA)তবে আপনি একটি সাধারণ উত্তর চেয়েছিলেন।
স্টিফান কোয়ান

উত্তর:


11

জাভাস্ক্রিপ্ট, 64 57 বাইট

মার্টিন ইন্ডারকে ধন্যবাদ 4 বাইট সরানো হয়েছে।

^(?!.*([^])(.*\1){3}]?)[$$[-^?!!.'''-*11{33}5577\\-]{57}$

এখানে চেষ্টা করুন।

ব্যাখ্যা (পুরানো)

^                                  # Beginning of the string.
(?!.*                              # Match only the strings that don't contain...
  (.)(.*\1){4}                     #     5 occurrences of the same character.
  [^1]?[^1]?                       #     Something that doesn't matter.
)
[]zzz^(?!!!.**[)\\1{{44}}666]{64}  # 64 occurrences of these 16 characters.
                                   # Some are duplicated to make sure the regex
                                   # contains 4 occurrences of each character.
\z                                 # End of the string.

2
আমি মনে করি এটি 60: ^(?!.*(\S)(.*\1){3}[^1]?)[]zzSS[-^?!!.'''-*1{33}0066-]{60}\z regex101
মার্টিন

এটি নেট। নেট:^(?'4'(?!(.*\4){3})[]$$[\\^^?!!..'-*{}33-5-]){54}$[5]*
জিমি 23013

কি কাজ করে না? ট্রেনিং লাইনফিডস?
মার্টিন ইন্ডার

নিবন্ধন করুন
jimmy23013

2

পার্ল এবং পিসিআরই রেজেক্স, 280 বাইট

^(?=(.*z){2})(?=(.*\(){43})(?=(.*\)){43})(?=(.*\*){22})(?=(.*\.){23})(?=(.*0){2})(?=(.*1){6})(?=(.*2){16})(?=(.*3){7})(?=(.*4){4})(?=(.*5){1})(?=(.*6){3})(?=(.*7){2})(?=(.*8){2})(?=(.*9){1})(?=(.*=){22})(?=(.*\?){22})(?=(.*\\){11})(?=(.*\^){2})(?=(.*\{){23})(?=(.*\}){23}).{280}\z

(কিছুটা) আরও পঠনযোগ্য:

^
(?=(.*z){2})
(?=(.*\(){43})
(?=(.*\)){43})
(?=(.*\*){22})
(?=(.*\.){23})
(?=(.*0){2})
(?=(.*1){6})
(?=(.*2){16})
(?=(.*3){7})
(?=(.*4){4})
(?=(.*5){1})
(?=(.*6){3})
(?=(.*7){2})
(?=(.*8){2})
(?=(.*9){1})
(?=(.*=){22})
(?=(.*\?){22})
(?=(.*\\){11})
(?=(.*\^){2})
(?=(.*\{){23})
(?=(.*\}){23})
.{280}\z

এটি লিখিত হিসাবে ও (2 ^ n) সময়ে চলে তাই অবিশ্বাস্যভাবে অক্ষম। এটি পরীক্ষা করার সবচেয়ে সহজ উপায় প্রতিটি সংঘটন প্রতিস্থাপন করতে হয় .*সঙ্গে .*?, যে ক্ষেত্রে যেখানে এটি প্রথম চেক করা মিলে যায় ঘটায় (যার অর্থ, এটির রৈখিক সময় মিলে যায়, কিন্তু এখনও সূচকীয় সময় যদি এটি মেলে ব্যর্থ নেয়)।

মূল ধারণাটি হ'ল আমরা রেজেক্সের দৈর্ঘ্য ২৮০ সমান করে প্রয়োগ করি এবং রিজেক্সের প্রতিটি অক্ষরকে কমপক্ষে একটি নির্দিষ্ট সংখ্যক বার দেখাতে বাধ্য করার জন্য লুক হেড এ্যাসেরেন্স ব্যবহার করি, উদাহরণস্বরূপ চরিত্রটিকে কমপক্ষে দু'বার প্রদর্শিত হতে (?=(.*z){2})বাধ্য করে z2+43+43+22+23+2+6+16+7+4+1+3+2+2+1+22+22+11+2+23+23280, সুতরাং আমাদের কোনও অক্ষরের কোনও "অতিরিক্ত" উপস্থিতি থাকতে পারে না।

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

মার্টিন ইন্ডারের সহযোগিতায় পার্ল এবং পিসিআরই রেজেক্স, 253 বাইট

আমি অনুমান করেছি যে সংক্ষিপ্ততর সমাধান হতে পারে যা কিছু অঙ্ক বাদ দেয় (সম্ভবত 9, 8 বা 7)। মার্টিন ইন্ডার একটি পেয়েছিলেন, নীচে দেখানো হয়েছে:

^(?=(.*z){2})(?=(.*\(){39})(?=(.*\)){39})(?=(.*\*){20})(?=(.*\.){21})(?=(.*0){4})(?=(.*1){6})(?=(.*2){11})(?=(.*3){6})(?=(.*4){3})(?=(.*5){2})(?=(.*6){3})(?=(.*9){4})(?=(.*=){20})(?=(.*\?){20})(?=(.*\\){9})(?=(.*\^){2})(?=(.*{){21})(?=(.*}){21}).{253}\z

পঠনযোগ্য সংস্করণ:

^
(? = (। * Z- র) {2})
(? = (। * \ () {39})
(? = (। * \)) {39})
(? = (। * \ *) {20})
(? = (। * \।) {21})
(? = (। * 0) {4})
(? = (। * 1) {6})
(? = (। * 2) {11})
(? = (। * 3) {6})
(? = (। * 4) {3})
(? = (। * 5) {2})
(? = (। * 6) {3})
(? = (। * 9) {4})
(? = (। * =) {20})
(? = (। * \?) {20})
(? = (। * \\) {9})
(? = (। * \ ^) {2})
(? = (। * {) {21})
(? = (। *}) {21})
। {253} \ z- র

আমি মনে করি {}না যে শেষ দু'দিক থেকে আপনার পালানো দরকার । আপনার নিজের মতো জিনিস যুক্ত করার দরকার নেই (?=(.*5){1})যেহেতু 5যদি আপনার চেহারাটি না থাকে তবে এমনটি হবে না । একটি সমস্যা হ'ল $পেছনের লাইনফিডের অনুমতি দেয়, তাই জিমির মতো করার \zপরিবর্তে আপনাকে সেখানে ব্যবহার $করতে হবে, তবে আপনি \প্রথম চেহারাটিতে সংরক্ষণ করার পরে আপনার পক্ষে কোনও বাইট লাগবে না বলে আমি মনে করি ।
মার্টিন ইন্ডার

আমি জানি যে অঙ্কের মতো জিনিস বাদ দেওয়া সম্ভব। যাইহোক, তারা অটোগ্রামটি কাজ করার জন্য সেখানে রয়েছে । প্রোগ্রামের যে কোনও অংশ অপসারণ করলে বাকি সমস্ত অংশ ভেঙে যায়, কারণ এটি আর প্রোগ্রামটিকে সঠিকভাবে বর্ণনা করে না। (প্রতিটি লাইনের জন্য গণনা প্রতিটি লাইনের জন্য গণনা গণনা করে! সুতরাং প্রোগ্রামটি পরিবর্তন করা সাধারণভাবে অসম্ভব the) $স্ট্রিংয়ের শেষে একটি নিউলাইনকে অনুমতি দেওয়ার ক্ষেত্রে, এটি সাধারণত নির্ভর করে কিভাবে রেজেক্সকে পার্শ্ববর্তী দ্বারা ডাকা হয় প্রোগ্রাম (তারা সাধারণত কোডে চালিত হয় যা ইতিমধ্যে লাইনে বিভক্ত হয়েছে)।

বা আরও সুনির্দিষ্ট হতে হবে: (?=(.*5){1})এই ক্ষেত্রে আমার দরকার আছে । আমি এটি সরিয়ে ফেললে প্রোগ্রামে 5 জন থাকত , কারণ (?=(.*1){6})এখন লাইনটি পড়তে হবে (?=(.*1){5})

পেছনের লাইনফিডের ক্ষেত্রে আপনার রেজেক্সের ইনপুট ধরণের চ্যালেঞ্জের ক্ষেত্রে কোনও বাধা আছে বলে মনে হয় না, যার অর্থ সাধারণত এটি কোনও স্ট্রিংয়ের জন্য কাজ করা উচিত, এবং কোনও ক্ষতি না করে পরিবর্তিত $হয় \z(এবং না অটোগ্রাম ভাঙবে না)।
মার্টিন ইন্ডার

আচ্ছা বুঝলাম; আপনি পরিবর্তন \$... $করতে z... \z। ওই কাজগুলো; আমি এটি পরিবর্তন করতে যাব।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.