সমতুল্য বন্ধনী প্রকারের


9

এই প্রশ্নের উপর ভিত্তি করে ।

একটি স্ট্রিং দেওয়া হয়েছে, প্রতিটি ()[]{}<>বন্ধনীকে যথাযথ ধরণের বন্ধুর সাথে প্রতিস্থাপন করুন যাতে বন্ধনীগুলি মেলে, এবং নীচে বন্ধনী বন্ধনীগুলি:

  1. বহিরাগতদের হয় ()
  2. সরাসরি ভিতরে থাকা ()উচিত[]
  3. সরাসরি ভিতরে থাকা []উচিত{}
  4. সরাসরি ভিতরে থাকা {}উচিত<>
  5. সরাসরি ভেতরে <>হতে হবে ()আবার (চক্র)

সমস্ত নন-বন্ধনীর অক্ষর অবশ্যই ঠিক তেমন থাকবে। ওপেন বন্ধনীগুলি কেবলমাত্র কিছু ধরণের ওপেন বন্ধনী এবং নিকট বন্ধনী সহ বন্ধ বন্ধনীগুলির সাথে প্রতিস্থাপন করা যেতে পারে।

ইনপুট সর্বদা এটি সম্ভব করে তুলবে। এর অর্থ এটির বন্ধনীগুলি সঠিকভাবে মেলে যদি তাদের ধরণের উপেক্ষা করা হয়। সুতরাং, {ab<)c]একটি বৈধ ইনপুট, ab)(cdবা ab((cdনা হয়।

উদাহরণ:

2#jd {¤>. = 2#jd (¤).
abcdef    = abcdef
(3×5+(4-1)) = (3×5+[4-1])
<<<>><<>><<<<<<>>>>>>> = ([{}][{}][{<([{}])>}])

এইভাবে ইনপুটটির নেটিভ ট্রান্সফর্মিংয়ের ব্যবহার (ভাষার অটো সিনট্যাক্স) অনুমোদিত নয়।

সর্বদা হিসাবে: সংক্ষিপ্ততম কোড জিতেছে।


আমি চ্যালেঞ্জ বুঝতে পারি না। ইনপুটটির ক্ষেত্রে আউটপুটটি কী হতে হবে?
xnor

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

আহ, এখন দেখছি। আমি বুঝতে পারিনি যে "সত্য" হওয়া উচিত সেই জিনিসগুলি যা আপনার সত্য হওয়া উচিত। আমি এটি আরও পরিষ্কার করার চেষ্টা করার জন্য সম্পাদনা করব।
xnor

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

2
@ দিরকিরিচেল কী বলছেন? শুধু এএসসিআইআই দিয়ে থাকি। বিভিন্ন অক্ষর ব্যবহার করা কেবলমাত্র অসি-ভাষাগুলির উপর অপ্রয়োজনীয় বিধিনিষেধ ব্যতীত চ্যালেঞ্জকে কিছুই যোগ করে না।
ফ্লিপট্যাক

উত্তর:


2

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

s=>s.replace(/./g,c=>~(p=l.indexOf(c))?l[p&4?--k&3|4:k++&3]:c,l='([{<)]}>',k=0)

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


1

লেক্স, 132 বাইট

%{
int i,o[4]={40,91,123,60};
%}
%%
[[({<] {putchar(o[i++&3]);}
[])}>] {putchar(o[--i&3]+2-!(i&3));}
%%
yywrap(){}
main(){yylex();}

flexকিছু সংখ্যক বাইটের ব্যয়ে (সম্ভবত 2, 3 বা 4; বিধিগুলি কিছুটা অস্পষ্ট) ব্যয় করে যথাক্রমে শেষ দুটি বা তিনটি লাইন মুছে ফেলার মাধ্যমে আপনি 27 বাইট (পোর্টেবল লেক্স) বা 30 বাইট ( সংকলক হিসাবে ব্যবহার করে) সংরক্ষণ করতে পারেন ) -llফলাফল সি সি লিঙ্ক করার সময় কমান্ড লাইন বিকল্পের জন্য জরিমানা । (এটি হ'ল সংকলনের পরিবর্তে lex brackets.l; cc lex.yy.c, আপনি সংকলন করুন lex brackets.l; cc lex.yy.c -ll)) এটি অবশ্যই এই পরিস্থিতিতে একটি বাণিজ্যযোগ্য making

1

জাভা, 155 বাইট

a->{String s="([{<)]}>";for(int i=0,j=0,k;i<a.length;i++){k=s.indexOf(a[i]);if(k>3){a[i]=s.charAt(--j%4+4);}else if(k>-1){a[i]=s.charAt(j++%4);}}return a;}

লাম্বদা char[]এটি একক যুক্তি হিসাবে গ্রহণ করে । আমরা অ্যারেটি দিয়ে লুপ করি এবং এটি আমাদের sভেরিয়েবলের স্ট্রিং ( ) এ একটি ভেরিয়েবল ( k) এ সঞ্চয় করি। এটি খোলার বা বন্ধ বন্ধনী ( s.indexAt()) বন্ধ আছে কিনা তা আমরা যাচাই করি এবং তার নেস্টিং ( s.charAt()) এর স্তরের উপর ভিত্তি করে উপযুক্ত ব্রাকেটের সাথে এটি প্রতিস্থাপন করব, এর সাথে যথাযথভাবে লুপিং করব ing%4


1

হাস্কেল, 126 বাইট

b="([{<"
d=")]}>"
y=cycle
(!)=elem
f(e:c)n(x:r)|x!b=y b!!n:f(y d!!n:e:c)(n+1)r|x!d=e:f c(n-1)r|1<3=x:f(e:c)n r
f c n s=s
f" "0

আদর্শের উপর চেষ্টা করুন। ব্যবহার:

*Main> f" "0 "<<<>><<>><<<<<<>>>>>>>"
"([{}][{}][{<([{}])>}])"

ব্যাখ্যা

fতিনটি আর্গুমেন্ট লাগে: একটি স্ট্রিং যা বন্ধনী বন্ধনীর জন্য স্ট্যাক হিসাবে কাজ করে, nনীড়ের গভীরতা এবং ইনপুট স্ট্রিং গণনা করার জন্য একটি int ।

f c n "" = ""                            -- base case for recursion: input string is empty
f (e:c) n (x:r)                          -- for the current char x
   | elem x "([{<" =                     -- check if it is an opening bracket
       (cycle "([{<")!!n :               --   if so, replace it with a bracket of the current nesting depth
           f ((cycle ")]}>")!!n : e : c) --   push the matching closing bracket on the stack
               (n+1) r                   --   increase depth level and check the next char
   | elem x ")]}>" =                     -- if x is a closing bracket
       e :                               --   replace it by the closing bracket from on top of the stack
           f c (n-1) r                   --   decrement depth level and check the next char
   | otherwise     = x : f (e:c) n r     -- otherwise keep x and check the next char
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.