মনে করুন একদিন আপনি আপনার অব্যবহৃত কম্পিউটার কর্ড এবং অ্যাডাপ্টারগুলির বড় বাক্সটি (ইউএসবি থেকে ইউএসবি মিনি, ভিজিএ থেকে ডিভিআই ইত্যাদি) খনন করছেন। জঞ্জাল দড়িগুলি সর্বত্র বেশ জগাখিচুড়ি করছে এবং আপনি ভাবছেন যে আপনি যদি সমস্ত কর্ডগুলিকে এক দীর্ঘ স্ট্র্যান্ডের সাথে সংযুক্ত করে কিছু সহজ করে তুলতে পারেন, এবং তারপরে কেবল এটিকে ঘুরিয়ে তোলেন।
প্রশ্নটি হল, আপনার লম্বা লাইনে সমস্ত কর্ড এবং অ্যাডাপ্টার সংযুক্ত করা সম্ভব? এটি অবশ্যই সর্বদা সম্ভব নয়, যেমন আপনার যদি সম্পূর্ণ ভিন্ন প্লাগ সহ দুটি কর্ড থাকে তবে সেগুলি একসাথে সংযুক্ত হতে পারে না। তবে যদি আপনার কাছে একটি তৃতীয় কর্ড থাকে যা উভয়টির সাথেই সংযোগ স্থাপন করতে পারে তবে আপনি আপনার সমস্ত কর্ডগুলি একসাথে স্ট্রিং করতে পারেন।
অল-কর্ড স্ট্র্যান্ডের প্রান্তে কী ধরণের প্লাগ রয়েছে সে সম্পর্কে আপনার চিন্তা নেই। লুপ তৈরি করতে তাদের একে অপরের সাথে প্লাগ ইন করার দরকার নেই। আপনি কেবলমাত্র জানতে চান যে সমস্ত কর্ড স্ট্র্যান্ড তৈরি করা সম্ভব এবং এটি যদি হয় তবে কীভাবে এটি করা যায়।
চ্যালেঞ্জ
এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা মাল্টলাইন স্ট্রিংয়ে নেয় যেখানে প্রতিটি লাইন আপনার নিজের একটি কর্ডকে চিত্রিত করে। -
উভয় প্রান্তে একটি প্লাগ সহ একটি কর্ড এক বা একাধিক ড্যাশ ( ) দিয়ে গঠিত। একটি প্লাগ সর্বদা 8 টি অক্ষরের একটি ()[]{}<>
।
সুতরাং এটি কিছু বৈধ কর্ড:
>->
(--[
}-{
<-----]
(---)
তবে এগুলি নয়:
-->
(--
)--
[{
---
কর্ডগুলি সংযোগ করার সময়, ঠিক একই বন্ধনী ধরণের প্লাগগুলি একসাথে সংযুক্ত হতে পারে।
সুতরাং এগুলি কিছু কার্যকর কর্ড সংযোগগুলি:
...---((---...
...---))---...
...---]]---...
...---{{---...
...---<<---...
এবং এগুলি অবৈধ:
...---()---...
...---)(---...
...---{]---...
...---{[---...
...---><---...
...--->)---...
যদি ইনপুটটির সমস্ত কর্ডগুলি একটি দীর্ঘ স্ট্র্যান্ডে পুনরায় সাজানো এবং সংযুক্ত করা যায়, তবে সেই স্ট্র্যান্ডটি এক লাইনে স্টাডআউটে আউটপুট দেয় (optionচ্ছিক ট্রেলিং নিউলাইন সহ)। যখন একাধিক সমাধান হয় আপনি আউটপুট থেকে তাদের যে কোনও একটি চয়ন করতে পারেন। যদি একটি একক স্ট্র্যান্ড তৈরি করা সম্ভব না হয়, তবে আউটপুট কিছুই না (বা emptyচ্ছিক ট্রেইলিং নতুন লাইনের সাথে একটি খালি স্ট্রিং আউটপুট)।
উদাহরণস্বরূপ, যদি ইনপুট হয়
[-->
{---]
>----{
আউটপুট হতে পারে
[-->>----{{---]
যেখানে সমস্ত কর্ড একসাথে স্ট্রিং করা হয়।
তবে যদি ইনপুট হত
[-->
{---]
কর্ডগুলি সংযুক্ত করা যাবে না যাতে কোনও আউটপুট থাকবে না।
নোট করুন যে সংযোগগুলি তৈরি করতে কর্ডগুলি প্রয়োজনীয় পরিমাণে প্রায় ফ্লিপ করা যেতে পারে। যেমন [-->
এবং <--]
কার্যকরভাবে একই কর্ড কারণ তারা একই ধরণের সংযোগ তৈরি করতে পারে। কিছু আউটপুট ইনপুট কর্ডগুলি ফ্লিপ করার উপর নির্ভর করে।
উদাহরণ স্বরূপ
(-[
}--]
আউটপুট থাকতে পারে
(-[[--{
যেখানে দ্বিতীয় কর্ডটি উল্টানো হয়, বা
}--]]-)
যেখানে প্রথম কর্ড উল্টানো হয়
(দ্রষ্টব্য যে সাধারণভাবে পুরো আউটপুট উল্টানো বৈধ হয় কারণ এটি প্রাথমিকভাবে প্রতিটি কর্ড পৃথকভাবে উল্টানোর মতোই as)
আউটপুটে কর্ডগুলির দৈর্ঘ্য অবশ্যই সংশ্লিষ্ট ইনপুট কর্ডগুলির দৈর্ঘ্যের সাথে মেলে। তবে কর্ডগুলি পুনরায় সাজানো এবং অল-কর্ড স্ট্র্যান্ডটি তৈরি করতে আপনি যতটা চান তার চারপাশে উল্টানো যেতে পারে। ইনপুটটিতে সর্বদা কমপক্ষে একটি কর্ড থাকবে।
বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।
পরীক্ষার মামলা
আউটপুট সহ কেস:
[-->
{---]
>----{
gives
[-->>----{{---]
or
[---}}----<<--]
(-[
}--]
gives
(-[[--{
or
}--]]-)
(-)
gives
(-)
[--{
gives
[--{
or
}--]
[-]
]-[
gives
[-]]-[
or
]-[[-]
[----->
)------------[
{--<
}---)
could give
[----->>--}}---))------------[
or
>--}}---))------------[[----->
or
}---))------------[[----->>--}
or
{--<<-----]]------------((---{
etc.
>-->
>->
>--->
could give
>-->>->>--->
or
>--->>-->>->
or
>->>-->>--->
or
<--<<---<<-<
etc.
(-]
]->
>-}
}-)
)-[
[-<
<-{
{-(
could give
(-]]->>-}}-))-[[-<<-{{-(
or
{-((-]]->>-}}-))-[[-<<-{
or
<-{{-((-]]->>-}}-))-[[->
etc.
আউটপুট ছাড়া কেস:
[-->
{---]
[-]
[-]
(-]
]->
}-)
>->
>-->
]---]
[-------------------]
]-------------------[
[-----------------]
[-----------------]
{--[
]--}