বন্ধনী ব্যালেন্সিং


20

আপনাকে বন্ধনী ( [{()}]) এবং অন্য কোনও অক্ষর ( A- Z, a- z, 0- 9, বিরামচিহ্ন) সহ একটি (সম্ভবত খালি) স্ট্রিং দেওয়া হবে । এটি নীচের নিয়মগুলি মান্য করে কিনা তা আপনাকে পরীক্ষা করতে হবে:

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

আউটপুট আপনার পছন্দ অনুযায়ী একক সত্যবাদী / মিথ্যা মান।

সংক্ষিপ্ততম কোড জিতেছে।


পরীক্ষার মামলা

b[[a{(/)}(())+={{}-}],] -> বৈধ

([h][e][l][l][o]) -> অবৈধ

[///[{(\/(arg()))}1{{((-)-2)}}]()]{()} -> বৈধ

hi -> বৈধ



9
@FUZxxl এটি দেখতে অনেক কঠিন চ্যালেঞ্জ বলে মনে হচ্ছে। আমি মনে করি অন্য কোথাও যদিও আছে।
মার্টিন এন্ডার

@ মার্টিনবাটনার হ্যাঁ, এটি পারে। আমি কিছু টেস্টকেস যুক্ত করেছি। এবং আপনি যে নকলটি সন্ধান করেছিলেন তা কি খুঁজে পেয়েছেন?
ভূত_স_ই_কোড 16

1
@ মার্টিনবাটনার: এই চ্যালেঞ্জটি আপনি যা ভাবছিলেন তা হতে পারে।
ইলমারি করোনেন

1
আমি মনে করি এটির সদৃশ হিসাবে আমাদের অন্য প্রশ্নটি বন্ধ করা উচিত; এটি আরও ভাল কারণ এটিতে কম বোনাস রয়েছে।
lirtosiast

উত্তর:


5

রেটিনা , 84 বাইট

^([^][}{)(]|()\(|(?<-2>)\)|(?!\2)((){|(?<-4>)}|(?!\4)(()\[|(?<-6>)])))*$(?!\2|\4|\6)

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

এটি মৌলিক বন্ধনী-চেকিং .NET রেজেক্সের মোটামুটি সোজা-ফরোয়ার্ড (তবে গল্ফযুক্ত) এক্সটেনশন ।

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


5

রেটিনা, 34

প্রথমত, creditণ যেখানে creditণ প্রদান হয়:

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

[^][(){}]

+`\(\)

+`{}

+`\[]

^$

তাই এখন একটি সঙ্গে sudo apt-get install mono-completeএবং git clone https://github.com/mbuettner/retina.gitআমি আমার উবুন্টু VM- র উপর একটি কাজ অক্ষিপট আছে। পরীক্ষার ফলাফল এখানে:

$ while read; do echo "Input: \"$REPLY\", Ouput: $( mono Retina.exe -s brbal.ret <<< "$REPLY" )" ; done < ../brbal.txt 
Input: "[[{((()))}{{(())}}]()]{()}", Ouput: 1
Input: "b[[a{(/)}(())+={{}-}],]", Ouput: 1
Input: "[///[{(/(arg()))}1{{((-)-2)}}]()]{()}", Ouput: 1
Input: "hi", Ouput: 1
Input: "", Ouput: 1
Input: "", Ouput: 1
Input: "([h][e][l][l][o])", Ouput: 0
Input: "[](", Ouput: 0
Input: "[(])", Ouput: 0
Input: "[({})]", Ouput: 0
Input: "[{[]}]", Ouput: 0
Input: "({})", Ouput: 0
$ 

@ থমাসকওয়া পরীক্ষার আউটপুট দেখুন। আমি বিশ্বাস করি কোডটি সঠিক এবং সমস্ত টেস্টকেস পাস হচ্ছে। কোডটিতে আপনি যে কোনও বিশেষ সমস্যা দেখেছিলেন বা বিশেষ টেস্টকেস ব্যর্থ হবে বলে মনে করেন?
ডিজিটাল ট্রমা

@ থমাসকওয়া আমি তাদের কোডটি পোর্ট করি নি, কারণ ইএসমিনের কোনও টুকরো কী করে তা আমার কোনও ধারণা নেই। আমি কেবল এই কোডটি দেখে যা দেখে মনে হচ্ছে তার ভিত্তিতে এটি লিখেছিলাম , তাই আমি মনে করি না এর একই ত্রুটি থাকার কোনও কারণ আছে।
মার্টিন ইন্ডার

বাহ, @ মার্টিনব্যাটনার, আপনি ঠিক বলেছেন! হ্যাঁ, আমি ভেবেছিলাম যে পুনরাবৃত্তির সাথে ম্যাচের বন্ধনীগুলির ভিতরে-বাইরে প্রতিস্থাপন করা সবচেয়ে যুক্তিযুক্ত was কোড চশমা ফিট করার জন্য একটি দ্রুত তাত্পর্য এটি কাজ করে।
মামা ফান রোল

3

সেড, 53

s/[^][(){}]//g
:;s/()//;t
:b;s/{}//;tb
:c;s/\[\]//;tc

এখানে আমি দাবি করছি যেহেতু sedসত্যই সত্য / মিথ্যা ধারণা নেই, তাই আমি ফাঁকা স্ট্রিংটিকে সত্যবাদী এবং অন্য সমস্ত স্ট্রিংকে মিথ্যা বলতে বোঝাতে চাইছি।

যদি তা গ্রহণযোগ্য না হয়, তবে আমরা কয়েকটি লাইন যোগ করতে পারি, এভাবে:

সেড, 66

s/[^][(){}]//g
:;s/()//;t
:b;s/{}//;tb
:c;s/\[\]//;tc
/./c0
/^$/c1

এটি মিথ্যা জন্য 0 এবং সত্যের জন্য 1 আউটপুট দেয়।


সঠিক একই সমাধানের রেটিনা সংস্করণ (34 বাইটে; প্রিন্টিং 0বা 1) এর জন্য মোলারম্যানফুলের উত্তরে আমার মন্তব্য দেখুন । কার পোস্ট করা উচিত তা আমি বলতে পারি না তবে এটি সম্ভবত আপনার দুজনের মধ্যে একটি হওয়া উচিত।
মার্টিন ইন্ডার

3

CJam, 27 26 বাইট

"(){}[]"q1$f&_,@2/e*{/s}/!

এটি 1 (সত্যবাদী) বা 0 (মিথ্যা) মুদ্রণ করে।এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন।

কিভাবে এটা কাজ করে

"(){}[]"                    Push that string.
        q                   Read all input and push it on the stack.
         1$                 Copy the bracket string.
           f&               Intersect each input character with the bracket string.
                            This pushes an array of singleton and empty strings.
             _,             Get the length of the array (L), i.e., the number of
                            characters in the original input.
               @            Rotate the bracket string on top of the stack.
                2/          Split it into ["()" "{}" "[]"].
                  e*        Repeat each character pair L times.
                    {  }/   For each character pair.
                     /      Split the string on the stack at occurrences of that
                            character pair. This dosn't work properly the first
                            time, since there's a string array on the stack.
                      s     Flatten the resulting array of strings.
                         !  Apply logical NOT.

3

𝔼𝕊𝕄𝕚𝕟, 43 চর / 62 বাইট

!Մ(Մ(Մ(ïċ/⁅⬮[\]{}]⌿),`⬮`,⬯),`{}`,⬯),`[]`,⬯)

Try it here (Firefox only).

নাঃ।


তবে আমি যদি নতুন প্রয়োগ করা বৈশিষ্ট্যগুলি ব্যবহার করি তবে আমি ২৮ টি চর / 47 বাইটে নামতে পারি:

!ïċ/⁅⬮[\]{}]⌿)ė`⬮”ė`{}”ė`[]”

ওহ, আপনি ভিতরে থেকে ম্যাচিং বন্ধনীগুলি সরিয়ে দিচ্ছেন? এটি রেটিনার
মার্টিন এন্ডার

2

জাপট , 42 37 বাইট

একটি বৈশিষ্ট্য সহ 5 বাইট সংরক্ষণ করা হয়েছে আমি বুঝতে পারি না যে আমার নিজের ভাষাটি ছিল ... এটি যুক্ত করার জন্য ধন্যবাদ, @ ডাউনগোট!

জাপটকে সত্যিকার অর্থেই আরও ভাল রেজিপ্লেক্স সমর্থন দরকার ...

!Uo"()[\\]\{}" e"\\(\\)" e"\{}" e"\\[]

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

কিভাবে এটা কাজ করে

               // Implicit: U = input string
Uo"()[\\]\{}"  // Remove all non-bracket.
e"\\(\\)"      // Recursively remove all pairs of simple brackets.
e"\{}"         // Recursively remove all pairs of curly brackets.
e"\\[]         // Recursively remove all pairs of square brackets.
!              // Return the Boolean NOT of the result.
               // (true for empty string, false for anything else)
               // Implicit: output last expression

2

সি 99, 226 208 207 বাইট

এটি আমার প্রথমবারের মতো কোনও কিছু গল্ফ করার চেষ্টা করছে

#define S s[i]
t(s,i)char*s;{int a[]={['[']=0,['{']=0,['(']=0};for(i=0;S*!(S=='{'&a['(']|S=='['&(a['(']|a['{'])|S==']'&(a['(']|a['{'])|S=='}'&a['(']);i++)a[S]++,a[S-S/90-1]--;return !(a['[']+a['{']+a['(']);}

রিডেবল:

int t(char* s){
    int a[265]={['[']=0,['{']=0,['(']=0};
    for(int i=0;s[i]&&!((s[i]=='{'&a['(']>0)|(s[i]=='['&(a['(']>0|a['{']>0))|(s[i]==']'&(a['(']>0|a['{']>0))|(s[i]=='}'&a['(']>0));i++){
        a[s[i]]++;
        a[s[i]-(s[i]/90+1)]--;
    }
    return !(a['[']+a['{']+a['(']);
}

এখানে একটি বাফার ওভারফ্লো রয়েছে তবে এটি কোনও কিছুর উপর প্রভাব ফেলবে বলে মনে হয় না - আমি বিশ্বাস করি এটি প্রান্তিককরণের কারণে।


1
আপনি স্থানটি বাদ দিতে পারেনchar* s
সাইয়েস

এটি জানতেন না - ধন্যবাদ
dj0wns

1

পার্ল, 50 + 1 = 51 বাইট

$_=/^((([^][)(}{]|\((?3)*\))|{(?2)*})|\[(?1)*])*$/

সত্যের জন্য -pপতাকা এবং মুদ্রণের প্রয়োজন এবং 1মিথ্যা ফলাফলের জন্য কিছুই নয়। আমি -pএক হিসাবে গণনা করছি , কারণ এটি একত্রিত হতে পারে -e:

> perl -pe '$_=/^((([^][)(}{]|\((?3)*\))|{(?2)*})|\[(?1)*])*$/'

কোডটি মূলত পার্লের নিফটি পুনরাবৃত্তীকরণের রেজেক্স বৈশিষ্ট্যটি ব্যবহার করে ইনপুটটির বিরুদ্ধে কেবল একটি সরল রেজেক্স ম্যাচ।

আমাকে এটি পরীক্ষা করতে এবং পার্ল বয়লারপ্লেটটি গল্ফ করার জন্য ডেনিসকে ধন্যবাদ।


1

পাইথন 3: 120 বাইট

@ আদনানের উত্তরে বিল্ডিং , ব্যবহারের জন্য আরও খাটো প্রমাণিত হয়েছে:

import re
x=re.sub('[^[\](){}]','',input())  
for i in('()','{}','[]'):  
 while x.find(i)>=0:x=x.replace(i,'')  
print(x=='')

1

পাইথন 3, 196 170 160 154 বাইট

অদ্ভুতভাবে দীর্ঘ, 6 বাইট সংরক্ষণের জন্য মেগোকে ধন্যবাদ:

d=y=""
for C in input():
 for a in "[](){}":y+=C*(C==a)
 y=y.replace("()",d)
x=y
for r in y:x=x.replace("{}",d)
for s in y:x=x.replace("[]",d)
print(x==d)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.