9 এর গুণকগুলির জন্য রেগেক্স


14

সীমাবদ্ধ রাষ্ট্রের মেশিনটি বর্ণনা করা সহজ যা 9 টির গুণকে স্বীকৃতি দেয়: অঙ্কের অঙ্কের (মোড 9) ট্র্যাক রাখুন এবং পরবর্তী যে কোনও অঙ্ক স্বীকৃত হবে তা যুক্ত করুন। এই জাতীয় এফএসএমের মাত্র 9 টি রাজ্য রয়েছে, খুব সাধারণ! এফএসএম-সনাক্তকরণযোগ্যতা এবং নিয়মিত ভাষার মধ্যে সমতা অনুসারে, 9 এর বহুগুণের জন্য নিয়মিত প্রকাশ হয় তবে যাইহোক, এই জাতীয় কোনও নিয়মিত প্রকাশ সম্ভবত ... খুব ... দীর্ঘ। যেমনটি, সম্ভবত একটি গিগাবাইটের আদেশে।

এর গুণকগুলির জন্য https://www.quaxio.com/triple/ এ একটি কাজের উদাহরণ রয়েছে the পৃষ্ঠার নীচে, লেখক কিছুটা "হ্যান্ড-অনুকূলিত" সমাধান প্রদান করেছেন যা এর থেকে নিখুঁত রূপান্তর থেকে কিছুটা খাটো রেগেক্স থেকে এফএসএম।

চ্যালেঞ্জ:

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

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

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

নিয়মাবলী:

  • ইনপুটটিতে কেবল অক্ষরগুলির মিল রয়েছে [0-9]*
  • আপনার রেজেক্স 9 টির গুণমানের সাথে মিলবে , তবে অন্য কিছু নয়। যে কেসগুলি সম্পূর্ণরূপে 0-9 অঙ্কগুলিতে তৈরি হয় না এবং অবৈধ ইনপুট হয় তা আপনার ইচ্ছামতো মেলে বা ব্যর্থ হতে পারে।
  • এটি একটি ডিএফএ দ্বারা সহজেই স্বীকৃত প্রেরণার ফলে, ফলস্বরূপ রেজেক্স অবশ্যই আরও তাত্ত্বিক পরিভাষায় নিয়মিত প্রকাশ হতে হবে , কেবলমাত্র অপারেটরগুলির অধীনে নিয়মিত ভাষা বন্ধ রয়েছে are সুনির্দিষ্টভাবে বলতে গেলে, কেবলমাত্র অনুমোদিত জিনিসগুলি:
    • লিটারেল, চরিত্র রেঞ্জ ( [ab], [a-f], [^k]), Kleene তারকা ( *), নোঙ্গর ( ^এবং $), প্রথম বন্ধনী মাধ্যমে গোষ্ঠীবদ্ধ করার, আবর্তনে ( |), ঐচ্ছিক শর্তাবলী ( ?), একটি-অর-আরো শর্তাবলী ( +), lookaheads ( (?=)), নেতিবাচক lookaheads ( (?!)), লুকবিহাইন্ডস ( (?<=)), নেতিবাচক লুকবিহিন্ডস ( (?<!)), শর্তসাপেক্ষ (যেমন https://www.regular-expressions.info/conditional.html - (?(?=test)then|else)), এবং সীমানা দৈর্ঘ্যের ব্যাকগ্রিফেস (নীচে দেখুন)
  • অনুমোদিত নয় এমন উদাহরণগুলির উদাহরণ :
    • স্বেচ্ছাসেবী দৈর্ঘ্য, ফরোয়ার্ড রেফারেন্স, পুনরাবৃত্তি, সাবরুটাইনস, লুপিং কনস্ট্রাক্টস, এক্সিকিউটেবল কোড, 'ইওল' এর কোনও প্রকরণ, বা পাটিগণিত মানের ক্ষেত্রে স্ট্রিং forালাইয়ের জন্য অন্তর্নির্মিত কনস্ট্রাক্টসের ব্যাকরেফারেন্স।
  • সীমাবদ্ধ দৈর্ঘ্যের বাঁধাইয়ের স্ট্রিং রয়েছে এমন দেখানো যেতে পারে এমন পশ্চাদগম্যগুলি গ্রহণযোগ্য, কারণ এগুলি সীমাবদ্ধ অবস্থায় সংরক্ষণ করা যেতে পারে এবং ভাষার নিয়মিততা পরিবর্তন করে না। উদাহরণস্বরূপ, (..2.[3-5])4\1.\1ক্যাপচারিং গ্রুপের সীমাবদ্ধ দৈর্ঘ্য হওয়ায় রেজেক্স গ্রহণযোগ্য \1। এটি নিয়মিত নির্মাণ is যেমন একটি কনস্ট্রাক্ট (2*)0\1গ্রহণযোগ্য নয়, যেমন বন্দী গোষ্ঠী সীমাবদ্ধ অবস্থায় সংরক্ষণ করা যায় না।
  • আপনার রেজেক্স আপনার ইচ্ছামত বহিরাগত নেতৃস্থানীয় শূন্যগুলির সাথে পূর্ণসংখ্যার গ্রহণ বা প্রত্যাখ্যান করতে পারে। তবে স্ট্রিংটি "0"অবশ্যই গ্রহণ করতে হবে।

2
সম্পর্কিত , এটিকে নকল হিসাবে বিবেচনা করা হবে কিনা তা নিশ্চিত নয়
ASCII- কেবল

আহ, হুঁ! আমার কাছে "রেজেক্স একাধিক" অনুসন্ধান ছিল কিন্তু "রেজেক্স বিভাজ্য" নয়। আমি মনে করি এটি হ'ল ভয়ঙ্করভাবে অনুরূপ।
অ্যালেক্স মাইবার্গ

11
এটি এখনও বলা হয়নি, সুতরাং পিপিসি এবং স্বাগতম আকর্ষণীয় প্রথম চ্যালেঞ্জ! অন্য ব্যবহারকারীর দ্বারা বর্ণিত হিসাবে, স্যান্ডবক্সে চ্যালেঞ্জের প্রস্তাবগুলি পোস্ট করার জন্য প্রায়শই সুপারিশ করা হয়, তবে প্রয়োজন হয় না, যাতে তারা মূলত পোস্ট করার আগে প্রতিক্রিয়া পেতে পারে। তবে এটি একটি সুচিন্তিত এবং স্পষ্ট চ্যালেঞ্জ, সুতরাং এটি স্যান্ডবক্সে সরানোর কোনও কারণ নেই। আপনি আমাদের সম্প্রদায় উপভোগ আশা করি!
কায়ারিং কোইনারিংহিং

200 কিবিবাইটেরও কম সমাধান করা সম্ভব, তাই এটি এত বিশাল হবে না
টন হসপেল

3
.NET এর এক্সটেনশানগুলি ব্যবহার করে সমাধান:^(0|9|(?<c>1|(?<c>2|(?<c>3|(?<c>4|(?<c>5|(?<c>6|(?<c>7|(?<c>8))))))))((?<-c>){9})?)*$(?(c).)
নিল

উত্তর:


3

হাস্কেল , 207,535 202,073 বাইট

5,462 বাইট যেখানে সম্ভব সেখানে ব্যবহারের 0|9পরিবর্তে সংরক্ষণ করা হয়েছে [09]

digits n
  | x == 0    = "0|9"
  | otherwise = show x
  where x = mod n 9

regex 0 = "[09]*"
regex n = (regex' n (-1) (-1)) ++ "*"

regex' 0 start end = digits (end - start)
regex' n start end = '(':(regex' 0 start end) ++ (concat ['|':(regex' (n-x) (start-x) (-1)) ++ (regex (n-x))
                                                  ++ (regex' (n-x) (-1) (end-x)) | x <- [1..n]]) ++ ")"

main = do
  putStr ("^" ++ (regex 8) ++ "$")

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

জিনিস শুরু করার জন্য লিঙ্কযুক্ত নিবন্ধের পাদটীকাগুলিতে দেওয়া রেজিেক্সের কেবলমাত্র দ্রুত অভিযোজন।

হারমান লাউস্টেইনের সৌজন্যে আউটপুট রেজেক্সের পাস্তবিন।

যদিও আমি পুরো রেজেক্সটি পরীক্ষা করতে সক্ষম হয়েছি না, 3 দ্বারা বিভাজ্যতা যাচাই করার জন্য প্রোগ্রামটি পরিবর্তন করে এর পরিবর্তে আমি এর উপর ভিত্তি করে রেজেক্সের ঠিক সমান কিছু দিয়েছি। তদ্ব্যতীত, অঙ্কের যোগফলের বিভাজ্যতা 4 বা 5 দ্বারা যাচাই করার জন্য প্রোগ্রামটি সংশোধন করাও আমি এর দ্বারা পরীক্ষিত নম্বরগুলিতে কাজ করে বলে মনে হচ্ছে।


আপনার পদ্ধতিটি 2 দ্বারা বিভাজ্যতার জন্য কী দেয় তাও পরীক্ষা করতে পারেন (কিছু এমন হওয়া উচিত /even$/) এবং 5 দ্বারা বিভাজ্যতা (এমন কিছু হওয়া উচিত /[05]$/)। PS: আপনার কোডের ভাষা উল্লেখ করুন
টন হসপেল

এখানে আউটপুট সহ একটি পেস্টবিন রয়েছে ( হাজার হাজার বাইট সংরক্ষণের ([09]|সাথে প্রতিস্থাপিত সমস্ত ঘটনা সহ (0|9|)
হারমান এল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.