সম্পূর্ণরূপে এক্সপ্রেশন প্রকাশ করুন


11

আজ আপনার চ্যালেঞ্জটি হ'ল একটি অভিব্যক্তির সমস্ত সম্ভাব্য পূর্ণ প্রথম উত্স উত্পাদন করা।

আপনার ইনপুটটি মুদ্রণযোগ্য ASCII এর একক লাইন যা অপারেটর দ্বারা পৃথক পৃথক এক বা একাধিক শর্তাদি। ইনপুটটিতে স্পেসও থাকতে পারে - আপনাকে অবশ্যই এগুলি উপেক্ষা করতে হবে। একটি পদটি [a-zA-Z0-9]একটি অপারেটর হয় [^ ()a-zA-Z0-9]। আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা বৈধ।

প্রদত্ত এক্সপ্রেশনটিকে পুরোপুরি বন্ধন করার সমস্ত সম্ভাব্য উপায় আউটপুট করুন newচ্ছিক ট্রেলিং নিউলাইন দ্বারা নিউলাইন দ্বারা পৃথক করে।

করবেন না :

  • পদগুলি প্যারেন্টেসাইজ করুন - কেবলমাত্র অপারেটরগুলির কাছাকাছি প্যারেন্থাইজ করুন।
  • শর্তগুলি পুনঃক্রম করুন।
  • যে কোনও স্থান ফাঁকা রাখুন।

ইনপুট / আউটপুট উদাহরণ:

N
N

a * b
(a*b)

x_x_0
(x_(x_0))
((x_x)_0)

a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)

বাইটের মধ্যে সবচেয়ে ছোট কোড জিততে পারে।


আমাদের বিবেচনা করতে হবে এমন সঠিক অপারেটরগুলি আপনাকে তালিকাবদ্ধ করতে হবে। কি !একটি অপারেটর? কি হবে ?
অপ্টিমাইজার

@ অপ্টিমাইজার আমি অপারেটর হিসাবে বিবেচিত তার সঠিক নিয়মিত অভিব্যক্তি তালিকাভুক্ত করেছি। !রিজেক্সটি ফিট করে, সুতরাং , তবে ইনপুটটির অংশ হতে পারে না কারণ এটি প্রিন্টযোগ্য এএসসিআইআই নয়।
orlp

আহ ঠিক আছে. সুতরাং শব্দটি বাদে অন্য কোনও কিছুই অপারেটর ...
অপটিমাইজার

সুতরাং উভয় পদ এবং অপারেটর সবসময়ই একটি চরিত্র দীর্ঘ?
ব্যবহারকারী81655

1
এখানে বাধ্যতামূলক এলআইএসপি-সম্পর্কিত পাং sertোকান
বিড়াল

উত্তর:


2

পাইথ, 38 বাইট

L?tbsmmjj@bdk"()"*y<bdy>bhd:1lb2bjy-zd

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

এটি একটি পুনরাবৃত্ত ফাংশন সংজ্ঞায়িত করে যে:

  • দৈর্ঘ্য 1 হলে ইনপুটটি প্রদান করে
  • অপারেটরগুলিতে এবং প্রতিটি বিভক্তির জন্য সমস্ত ইনপুটটির দুটি দ্বি-বিভাজন গ্রহণ করে:
    • প্রতিটি অংশে নিজেকে পুনরাবৃত্তি বলে
    • প্রতিটি অর্ধেকের ফলাফলের কার্টেসিয়ান পণ্য গ্রহণ করে
    • অপারেটর বিভক্ত হয়ে প্রতিটি ফলাফলের সাথে যোগ দেয়
    • যোগদানের ফলাফলকে প্রথম বন্ধনীয় করে তোলে
  • এবং অবশেষে ফলাফলের অ্যারেগুলিকে সম্মতি জানায়।

ফাংশনটি পরে ফাঁকা স্থানগুলির সাথে ইনপুট স্ট্রিংয়ের সাথে ডাকা হয় এবং ফলাফলগুলি নিউলাইনগুলিতে যোগ হয়।


3

জাভাস্ক্রিপ্ট (ES6), 208 197 বাইট

s=>((q=x=>x.map((_,i)=>(a=[...x.slice(0,i*=2),p="("+x[i]+x[++i]+x[++i]+")",...x.slice(i+1)],x[i]?a[1]?q(a):r.push(p):0)))([...s.replace(/ /g,o="")],r=[]),r.map((l,i)=>r.indexOf(l)<i?0:o+=l+`
`),o)

ব্যাখ্যা

একটি পুনরাবৃত্ত ফাংশন ব্যবহার করে যা [ t, o, t, o, etc... ]প্রতিটি টানা দুটি [ (tot), o, etc... ]টার্মের এক সাথে যুক্ত করে এবং এই অ্যারেটিতে কেবল একটি উপাদান উপস্থিত না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করে, তারপরে সদৃশ মানগুলি ফিল্টার করে।

s=>(                                  // s = input string
  (q=x=>                              // q = parenthesise array function
    x.map((_,i)=>(
      a=[                             // a = p with parenthesised pair of terms
        ...x.slice(0,i*=2),
        p="("+x[i]+x[++i]+x[++i]+")", // parenthesise and join 2 terms and an operator
        ...x.slice(i+1)
      ],
      x[i]?a[1]                       // make sure the loop is not over
        ?q(a)                         // check next level of permutations
        :r.push(p)                    // add the permutation to the results
      :0
    ))
  )([...s.replace(/ /g,               // remove spaces and parenthesise all expressions
    o="")],                           // o = output string
    r=[]),                            // r = array of result strings
  r.map(                              // filter out duplicates
    (l,i)=>r.indexOf(l)<i?0:o+=l+`
`
  ),o)                                // return o

পরীক্ষা

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