ছদ্মবেশে বন্ধনী আছে?


12

কেউ আমাদের একটি স্ট্রিং দিয়েছে, তবে সমস্ত বন্ধনী-সদৃশ অক্ষরগুলি সাধারণ চরিত্রে পরিবর্তন করা হয়েছে, এবং কোনটি বা এমনকি কতগুলি ছিল তা আমরা জানি না। আমরা কেবল জানি যে যদি L1,L2,L3,...,LNবাম বন্ধনীর বিভিন্ন ধরণের হয়ে থাকে এবং R1,R2,R3,...,RNবিভিন্ন রকমের ডান বন্ধনীগুলি ছিল, সমস্ত আলাদা (2N স্বতন্ত্র বন্ধনী), তবে একটি স্ট্রিং বৈধ হবে যদি এটির মধ্যে একটি হয় (+ সাধারণ স্ট্রিং কনটেন্টেশন):

  • L1+X+R1,, L2+X+R2...,, LN+X+RNযেখানে Xএকটি বৈধ স্ট্রিং,

  • X+Y, কোথায় Xএবং Yবৈধ স্ট্রিং,

  • কোনও একক অক্ষর যা বন্ধনী চরিত্র নয়।

  • খালি স্ট্রিং

আমরা জানি তারা বন্ধনী পরিবর্তন করার আগে তারা বৈধ স্ট্রিং দিয়ে শুরু করেছিল এবং তারা ইতিমধ্যে স্ট্রিংয়ে থাকা কোনও অক্ষরে রূপান্তরিত করেনি। প্রতিটি ব্র্যাকেটের জন্য কমপক্ষে একটি জুড়িও বিদ্যমান ছিল। কোন অক্ষরটি মূলত বাম এবং ডান বন্ধনী জুড়ে ছিল তা পুনর্গঠন করতে পারেন ( প্রদত্ত শর্তগুলি সন্ধান করুন Liএবং Riঅনুসরণ করুন)?

অক্ষরের জোড়গুলি বন্ধনী হিসাবে আউটপুট করুন। উদাহরণস্বরূপ, যদি (){}[]আসলে অক্ষর বন্ধনী ছিল, আপনি আউটপুট পারে (){}[]বা {}[]()বা [](){}, ইত্যাদি একটা স্ট্রিং এর জন্য এই কাজ করতে একাধিক উপায় হতে পারে, আপনি শুধুমাত্র ফিরতে এক ধরনের আরও কিছু জোড়া (উদাহরণ দেখুন) সঙ্গে কোন বন্ধনী নিয়োগ যে প্রয়োজন। দ্রষ্টব্য যে আউটপুট স্ট্রিংয়ের সর্বদা একটি দৈর্ঘ্য হওয়া উচিত।

উদাহরণ:

abcc- cবন্ধনী হতে পারে না, যেহেতু দুটি উপস্থিতির সাথে অন্য কোনও চরিত্র নেই, তবে abএকটি বন্ধনী জুটি হতে পারে, সুতরাং আপনি ঠিক আউটপুট পাবেন ab

fffff - সর্বাধিক একটি অক্ষরযুক্ত যে কোনও স্ট্রিংয়ের বন্ধনী থাকতে পারে না, তাই আপনি খালি স্ট্রিং বা আউটপুট কিছুই ফেরত পাবেন না।

aedbedebdcecdec - এই স্ট্রিংটিতে কোনও বন্ধনী থাকতে পারে না কারণ সেখানে 1 এ, 2 বিএস, 3 সিস, 4 ডিএস এবং 5 এস রয়েছে, সুতরাং কোনও দুটি অক্ষর একই সংখ্যক বার হয় না, যা বন্ধনী থাকা আবশ্যক।

abcd- সম্ভব বরাদ্দকরণ হয় ab, cd, abcd, cdab, adbc, bcad, ac, ad, bcএবং bd, (সেইসাথে খালি নিয়োগ, যা তাদের সব আছে হিসাবে) কিন্তু আপনি দীর্ঘতম বরাদ্দকরণ এক ফিরে আসবে, তাই আপনি ফিরে আসবে abcd, cdab, adbc, অথবা bcad

aabbcc, abc- এই উভয় আছে ab, acএবং bcবৈধ জোড়া হিসাবে। আপনাকে অবশ্যই এই জোড়াগুলির মধ্যে একটি ফিরিয়ে দিতে হবে, তাতে কোনও ব্যাপার নেই।

abbac- ক এবং খ একই চরিত্রের গণনা রয়েছে তবে তারা আসলে কাজ করতে পারে না, কারণ তাদের মধ্যে একটির অপরের সমস্ত ঘটনার বাম এবং ডান উভয় ক্ষেত্রেই ঘটে। কিছু না ফেরত।

aabcdb- cdএবং abহুবহু দুটি বন্ধনী জোড়া, সুতরাং হয় হয় আউটপুট cdabবা abcd

abcdacbd- শুধুমাত্র এক জোড়া একবারে অর্জন করা যেতে পারে, কিন্তু ab, ac, bd, cd, এবং adসম্ভব যুগলের সব আসতে পারেন করছে। আপনি কোন জোড়াকে বেছে নিচ্ছেন তা বিবেচনা না করেই এর উদাহরণ রয়েছে যেখানে এর মধ্যে অন্য একটি চরিত্র রয়েছে, যা অন্য কোনও জোড়কে নিষিদ্ধ করেছে ad, যেখানে অন্য জোড়া bcএবং cbএকাও সম্ভব নয়, এবং তাই সম্ভবও হতে পারে না সঙ্গে ad

এটি কোড গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম কোড। আপনার ভাষার পক্ষে সম্ভব হলে এসডিডিএন থেকে ইনপুট put যদি এটি সম্ভব না হয় তবে আপনার উত্তরে ইনপুট পদ্ধতিটি নির্দেশ করুন।


1
ইনপুট জন্য abcd, আউটপুট adbcএছাড়াও গ্রহণযোগ্য হবে, তাই না?
প্যাট্রিক রবার্টস

হ্যাঁ, আমি এটি উদাহরণে যুক্ত করেছি।
মিথ্যা মেলুন

উত্তর:


4

রুবি, 373 বাইট

i=gets.chomp
b=[*(i.chars.group_by{|x|x}.group_by{|x,y|y.size}.map{|x|s=x[1].size
x[1][0...s-s%2].map{|x|x[0]}*''}*'').chars.each_slice(2)]
puts [*[*b.size.downto(1).map{|n|b.combination(n).map{|t|[t*'',(h=Hash[t]
s=[]
o=1
i.each_char{|c|s.push(c)if h.keys.include?c
(o=false if s.empty?||!h[s.pop].eql?(c))if h.values.include?c}
o ?s.empty?: o)]}}.find{|x|x[0][1]}][0]][0]

এটি এখানে স্ট্যাক পার্সারের একটি গল্ফ সংস্করণ ব্যবহার করে ।

এটি সম্ভবত আরও সরল করা যেতে পারে, তবে আমার মস্তিষ্ক আরও কিছু পরিচালনা করতে পারে বলে আমি মনে করি না।

সমস্ত পরীক্ষার কেস: http://ideone.com/gcqDkK

শ্বেত স্পেস সহ: http://ideone.com/pLrsHg

অবহেলিত (বেশিরভাগ): http://ideone.com/oM5gKX

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