বন্ধনী বুদবুদ!


27

সেখানে হয় কয়েক প্রশ্ন এই সাইটে বন্ধনী মিট, এবং কিনা তা পরীক্ষা করে বন্ধনী সুষম সম্পর্কে। আমি প্রস্তাব দিচ্ছি যে এখন কিছু সময়ের জন্য সেই ভারসাম্য বন্ধনী ব্যবহার করার সময় এসেছে!

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

চ্যালেঞ্জ

ইনপুটটি একটি একক প্রকারের গোলাকার (), বর্গক্ষেত্র [], কোঁকড়ানো {}বা কোণে মিলে যাওয়া বন্ধনীগুলির একটি স্ট্রিং <>। আপনি কীভাবে আপনার প্রোগ্রামটি গ্রহণ করতে চান এটি আপনার উপর নির্ভর করে এবং এমন একটি প্রোগ্রাম যা কেবলমাত্র একক ধরণের বন্ধনী গ্রহণ করে তা গৃহীত হয়। (আপনার প্রোগ্রাম যদি সেগুলি হ্যান্ডেল করতে পারে তবে কালিফিকাল বোনাস, যদি এটি একই ইনপুটগুলিতে সমস্তগুলি পরিচালনা করতে পারে তবে বিশাল কাল্পনিক বোনাস পয়েন্ট)) ইনপুটটিতে বন্ধনীগুলির মধ্যে কিছু থাকতে পারে না, যদিও পেছনের শ্বেতক্ষেত্রের অনুমতি রয়েছে।

আউটপুটটি হ'ল দুটি ব্র্যান্ডস একই স্ট্রিং ছাড়া বুদবুদগুলির একই কনফিগারেশন উপার্জন করে এমন বন্ধনীগুলির সমস্ত সম্ভব পুনর্বিন্যাস (স্বেচ্ছাসেবী ক্রমে এবং মূল ইনপুট সহ) is এর অর্থ হ'ল একটি ইনপুট সহ ()()আউটপুটটিও ঠিক আছে ()(), যদিও এটি প্রযুক্তিগতভাবে দুটি বুদবুদ স্থানগুলি অদলবদল করতে পারে। বিশাল কাল্পনিক বোনাসের জন্য, {}[]()ইচ্ছার একটি ইনপুট অবশ্যই 6 টি বিভিন্ন উপাদান / স্ট্রিং / লাইনগুলির আউটপুট নিয়ে যায়।

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

যেকোন যুক্তিসঙ্গত আউটপুট বিন্যাসটি করবে যেমন স্ট্রিংগুলির তালিকা বা একক অক্ষরের তালিকার একটি তালিকা বা একক স্ট্রিংয়ের সাথে কোনও একরকম শ্বেত স্পেস, অথবা প্রিন্ট করা stdoutবা stderrকিছু দৃশ্যমান হোয়াইটস্পেসের অক্ষর (বেশিরভাগ ক্ষেত্রে নতুনরেখা বা স্থান) এর মধ্যে মুদ্রণ প্রতিটি পুনর্গঠন।

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

স্কোরটি কোডের বাইট সংখ্যা; প্রতিটি ভাষার জয়ের জন্য সর্বনিম্ন গণনা। আপনি খেয়াল করতে পারেন আপনি নিয়মিত বা বৃহত্তর কোনও কাল্পনিক বোনাস পান কিনা তবে তা আপনার স্কোরকে প্রভাবিত করে না। সত্যিকারের বোনাসগুলি সঠিক ব্যালেন্স করা খুব কঠিন।

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

উদাহরণ 1:

ইনপুট:

()(())

আউটপুট:

()(())
(())()

উদাহরণ 2:

ইনপুট:

(()())()()

আউটপুট:

(()())()()
()(()())()
()()(()())

উদাহরণ 3:

ইনপুট:

(()(()))()

আউটপুট:

((())())()
()((())())
(()(()))()
()(()(()))

কেন আমরা ((()))উদাহরণ 1 পেতে পারি না ? বা ()()()? দেখে মনে হচ্ছে আপনি প্রতিটি ইনপুটের জন্য অনুমতি অনুপস্থিত।
গম উইজার্ড

@ ওয়েট উইজার্ড যা বুদবুদগুলির একই কনফিগারেশনটি দেয় না: ভিতরে দুটি খালি বুদবুদ সহ একটি বড় বুদ্বুদ।
আর্থার

@ ওয়েট উইজার্ড যতদূর আমি বুঝতে পেরেছি, আপনি অন্য বুদ্বুদের ভিতরে থেকে অন্য বুদ্বুদকে বাইরে থেকে বা বুকে নিয়ে কোনও বুদবুদ নিতে পারবেন না।
গ্রজেগোর্জ পুয়াওস্কি

@ ওয়েট উইজার্ড আমি একটি ছোট ব্যাখ্যা যুক্ত করেছি।
আর্থার

7
বিটিডব্লিউ, পিপিসিজিতে আপনাকে স্বাগতম! প্রথম প্রথম চ্যালেঞ্জ!
মিঃ এক্সকোডার

উত্তর:


4

সিজেম , 18 বাইট

{~{_{{B}%e!}&}:B~}

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

-২ বিজনেস বিড়ালকে ধন্যবাদ ।

কেবল স্ট্রিংযুক্ত স্ট্রিং হিসাবে ইনপুট গ্রহণ করে []। আদেশের তালিকা ফেরত দেয় (খালি তালিকা সিজেমে খালি স্ট্রিংয়ের সমান, তাই পরিবর্তে []আপনি পাচ্ছেন "")।


[][]শুধু কেন আউটপুট ""? - কোনও অতিরিক্ত সেট ইনপুটটি আবদ্ধ করা উচিত []? যদি তাই হয় তবে কেন []আশেপাশের অতিরিক্ত সেট (সম্ভবত?) উল্লিখিত উদাহরণের আউটপুট? এছাড়াও প্রশ্নটিতে বলা হয়েছে "আপনার ইনপুটটিতে আপনি যেমন গ্রহণ করেন ঠিক তেমন ধরণের বন্ধনী ব্যবহার করা উচিত here এখানে উল্লেখ করা বন্ধনী, নিউলাইন এবং স্পেসগুলি ছাড়াও এবং আপনি যে বিভাজনকারী ব্যবহার করেন না কেন কিছুই প্রিন্ট করা উচিত নয়", তাই আমি ' মি নিশ্চিত না একটি মিশ্রণ []এবং ""গ্রহণযোগ্য।
জোনাথন অ্যালান

@ জোনাথান অ্যালান হ্যাঁ আমার মনে হয় আপনার [][]অতিরিক্ত একটি জোড় যুক্ত করা উচিত []। অন্যদের জন্য আমি সত্যই নিশ্চিত নই যে তারা অবৈধ।
এরিক আউটগল্ফার

আমি মনে করি আপনি _{{B}%e!}&পরিবর্তে এটি করতে পারেন_!!{{B}%e!}*
বিজনেস বিড়াল

@ বিজনেসগেট &শর্ট সার্কিট বা কিছু করে?
এরিক দ্য আউটগল্ফার

&অন্য মানটি সত্যবাদী হলেই ব্লকটি চালায়
বিজনেস ক্যাট

4

হাস্কেল , 227 210 208 205 বাইট

import Data.List
l=last
a!x=init a++[l a++[x]]
h[]=[""]
h(x:y)=["("++z++")"++t|z<-v x,t<-h y]
g(a,r)x|x=='('=(a+1,l$(r++h[]):[r!x|a>0])|1>0=(a-1,l$r:[r!x|a>1])
v s=nub$h=<<(permutations.snd$foldl g(0,[])s)

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

এই এক কঠিন ছিল!

কিছুটা গল্ফ করল

লাইকোনি ধন্যবাদ দুটি বাইট সংরক্ষণ করা

ব্রুস ফোর্তিকে ধন্যবাদ দুটি বাইট সংরক্ষণ করুন

আমি নিশ্চিত নই যে এটি প্রতিটি ক্ষেত্রে কাজ করে। কিছু ব্যাখ্যা:

  • a!xস্ট্রিং- xএর সর্বশেষ তালিকায় স্ট্রিং যুক্ত করুন a(একটি টাইপযুক্ত [[String]])

  • snd$foldl(\(a,r)x->if x=='('then(a+1,last$(r++[[]]):[r!x|a>0])else(a-1,last$r:[r!x|a>1])সহজ ধারণাটি প্রকাশ করতে সংক্ষিপ্ত শর্তসাপেক্ষ ব্যবহার করুন : রুট )( এস-এ একটি স্ট্রিং বিভক্ত করুন । যেমন "(()(()))()"দেয় ["()(())", ""]

  • আমাদের বিভাজনের প্রতিটি অংশ প্রক্রিয়া করতে হবে, তারপরে সঠিক আউটপুট পেতে সমস্ত স্ট্রিং জড়ো করে যোগদান করতে হবে:

    1. hঅংশগুলির একটি তালিকা প্রক্রিয়া করে: এটি vপ্রথম অংশে প্রযোজ্য এবং ফলাফলটি বাকি অংশগুলির প্রক্রিয়ায় একত্রিত করে।

    2. v অংশগুলির প্রতিটি ক্রমবর্ধনের জন্য ফলাফলকে একত্রিত করে এবং নকলগুলি সরান।

আরও বিস্তৃত দর্শন যোগ করার জন্য: আপনার কাছে খালি নোড সহ একটি গাছ (বাইনারি নয়) রয়েছে। ছুটি হয় ()। প্রতিটি নোডের জন্য আপনাকে শাখাগুলির সমস্ত অনুমতি দিতে হবে, তবে আপনি কোনও নোড থেকে একটি শাখা না নিয়ে অন্য নোডে রাখতে পারবেন না। আমি প্রথমে এক ধরণের গভীরতার অনুসন্ধান করেছি।


আপনি কাছাকাছি প্রথম বন্ধনীর ফেলে দিতে পারেন init a
লাইকনি

2

পাইথন 2, 353 350 331 বাইট

s=input()
f=lambda i,t=0:i+1if t<0else f(i+1,t-1)if"("<s[i+1]else f(i+1,t+1)
c=[(x,f(x))for x in range(len(s))if")">s[x]]
p=lambda l:[[]]if len(l)<1else[x for y in p(l[1:])for x in[y[:i]+[l[0]]+y[i:]for i in range(len(y)+1)]]
print[''.join(x)for x in p([s[c[x][0]:c[x][1]]for x in range(len(c))if all(c[x][1]>y[1]for y in c[:x])])]

()ইনপুট হিসাবে স্ট্রিং প্রাপ্ত করে ফলাফল মুদ্রণ করে।

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

আমি ব্যবহার এড়ানো itertools.permutationsসহায়তায় পাওলো এর উত্তর এই প্রশ্ন

আপনাকে ধন্যবাদ ব্যবসায়িক বিড়াল 3 বাইট খোঁজার জন্য, এবং আপনাকে ধন্যবাদ জনাব Xcoder একটি অবিশ্বাস্য 19 বাইট জন্য!

ব্যাখ্যা

  1. ()ইনপুট স্ট্রিংয়ে প্রতিটি জোড়ের সূচকের তালিকার তালিকা তৈরি করুন।
  2. অন্য ()জোড়া দিয়ে ঘিরে থাকা তালিকা থেকে কোনও টুপলগুলি ফেলে দিন ।
  3. বাকী টিপলসের সূচকে স্ট্রিংটি কেটে দিন।
  4. স্লাইসের তালিকার প্রতিটি অনুক্রমের একটি তালিকা তৈরি করুন।
  5. মুদ্রণের জন্য একটি নতুন লাইন দিয়ে তালিকায় যোগদান করুন।

আমি কয়েকটি বাইট দেখলাম যা শেভ করা যেতে পারে। আপনার কিছু শ্বেতস্পেস রয়েছে যা মুছে ফেলা যায়, যথা: পরে printএবং এর মতো দাগগুলিতে i+1 if(হতে পারে i+1if)। এছাড়াও আপনার কাছে থাকা একটি স্থানে y[0:i], আপনি 0. টি বাদ দিতে পারেন
ব্যবসায় ক্যাট

আপনাকে ধন্যবাদ, @ বিজনেসগেট! আমার আইডিই সেই কয়েকটিতে অভিযোগ করে, তাই আমি এখনও কোড গল্ফের কিছু কৌশল শিখছি।
সলভেশন

342 বাইট (-8 বাইট) শ্বেতস্থান সরানোর জন্য কিছু শর্তসাপেক্ষে পুনরায় অর্ডার করে।
মিঃ এক্সকোডার

340 বাইট (-10 বাইট) সমতা যাচাইয়ের তুলনায় অভিধানিক তুলনা ব্যবহার করে।
মিঃ এক্সকোডার

331 বাইট (-19 বাইট) কারণ চ্যালেঞ্জটি স্ট্রিংগুলির একটি তালিকা ফেরত দেওয়ার অনুমতি দেয়। হ্যাঁ, আমরা ম্যাথামেটিকাকে পরাজিত করেছি :-)
মিঃ এক্সকডার

2

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 222 বাইট

s=>(g=a=>a+a?[for(x of g(a[0]))for(y of a.keys())for(z of g(a.slice(1)))(z.splice(y,0,x),z)]:[a])(eval(`[${s.replace(/]\[/g,`],[`)}]`)).map(g=a=>`[`+a.map(g).join``+`]`).sort().filter(s=>t<(t=s),t=``).map(s=>s.slice(1,-1))

[]স্ট্রিং নেয় । ব্যাখ্যা:

s=>(                                Inner function to permute an array
 g=a=>a+a?[                         If array is not empty
  for(x of g(a[0]))                 Permute the first element of the array
  for(y of a.keys())                Generate a list of insertion points
  for(z of g(a.slice(1)))           Permute the rest of the array
  (z.splice(y,0,x),z)]:             Make all possible permutations
  [a]                               Otherwise return a list of an empty array
)(eval(`[${                         Convert the string to a nested array
   s.replace(/]\[/g,`],[`)}]`)      ... inserting commas where necessary
).map(                              Process the results
 g=a=>`[`+a.map(g).join``+`]`       Recursively convert back to string
).sort().filter(s=>t<(t=s),t=``     Check for duplicates
).map(s=>s.slice(1,-1))             Remove outer `[]`s

0

গণিত, 337 বাইট

না কোড-গলফ পয়েন্ট পেতে, কিন্তু ব্যবহারের দেখানোর জন্য Permutationsএবং Distributeএই সমস্যা। যদিও আরও ভাল পন্থা থাকতে পারে।

( seq: ক্রম, altবিকল্প)

SetAttributes[alt, {Flat, OneIdentity}]
StringTake[
  StringReplace[ToString[
    ToExpression["{" <> StringReplace[#, "}{" -> "},{"] <> "}"]
        /. List -> Permutations@*seq
       /. List -> alt
      /. seq -> (Distribute[seq@##, alt] &)
     /. {seq -> List, alt -> Alternatives}],
   {", " -> "", "} | {" -> "\n"}],
  {2, -2}] &

কোঁকড়া বন্ধনী {এবং ব্যবহার করে স্ট্রিং হিসাবে ইনপুট নিন }। একটি বহু-লাইন স্ট্রিং আউটপুট।

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