পটভূমি
ঘটনাটি মোটামুটি অস্বাভাবিক প্রোগ্রামিংয়ের একটি ভাষা, যাতে এর টোকেনগুলির তালিকাটি পূর্বনির্ধারিত নয়, বরং ইনপুট থেকে অনুমান করা হয়। যেমনটি, কোনও ইভেন্ট প্রোগ্রামটি টোকেনাইজ করা মোটামুটি কঠিন হতে পারে, বিশেষত যদি আপনি দক্ষতার সাথে এটি করতে চান। এই টাস্কটি নিজেই করা সম্পর্কে।
কাজটি
আপনার প্রোগ্রামটিকে ইনপুট হিসাবে একটি স্ট্রিং দেওয়া হবে। ঘটনাটি টোকেনাইজ করার জন্য অ্যালগরিদমটি এখানে ব্যবহার করা হয়েছে:
- ঠিক তিনটি উপায়ে ইনপুটটির একটি স্ট্রিং হিসাবে উপস্থিত সমস্ত স্ট্রিংগুলি সনাক্ত করুন (অর্থাত ইনপুটটির মধ্যে সেই স্ট্রিংয়ের ঠিক তিনটি উপস্থিতি রয়েছে)।
- এই স্ট্রিং যে একটি অন্য ধরনের স্ট্রিং এর সাবস্ট্রিং করছে কোনো পরিত্যাগ করবেন (যেমন ইনপুট জন্য
ababab
, একমাত্র অবশিষ্ট স্ট্রিং হতে হবেab
, নাa
বাb
, কারণa
এবংb
উভয় সাবস্ট্রিং হয়ab
)। - ইনপুটটির মধ্যে ওভারল্যাপ হওয়া কোনও স্ট্রিং ফেলে দিন। (উদাহরণস্বরূপ,
aaaa
ঠিক তিনটি অনুলিপি রয়েছেaa
, তবে এই অনুলিপিগুলি দ্বিতীয় এবং তৃতীয় অক্ষরগুলিতে ওভারল্যাপ হয়, তাই এটি বাতিল করে দেওয়া হবে Like একইভাবে,abababa
এখানে তিনটি অনুলিপিab
এবং তিনটি অনুলিপি রয়েছেba
, তবে দ্বিতীয় থেকে ষষ্ঠ অক্ষরের প্রতিটি রয়েছে) একটিab
এবং একটি এর ওভারল্যাপba
, তাই উভয়ab
এবংba
পরিত্যাগ করা হবে)। - এই পর্যায়ে থাকা যে কোনও স্ট্রিং হ'ল প্রোগ্রামটি ব্যবহৃত টোকেন। মূল ইনপুটটি এই টোকেনগুলির একটি ক্রমে টোকেন করুন (পূর্ববর্তী পদক্ষেপে বিযুক্ত হওয়ার কারণে, এটি করার একমাত্র উপায় থাকবে)। ইনপুটটিতে থাকা কোনও অক্ষর যা কোনও টোকেনের অংশ নয় সেগুলি মন্তব্য হিসাবে বিবেচিত হবে এবং বাতিল হবে।
আপনার প্রোগ্রামটিকে ইনপুট হিসাবে একটি স্ট্রিং নিতে হবে এবং আউটপুট হিসাবে স্ট্রিংয়ের টোকেনিসিয়েশন (টোকেনগুলির একটি তালিকা, যার প্রতিটি স্ট্রিং হিসাবে প্রকাশ করা হয়) ফিরিয়ে আনতে হবে। অতিরিক্তভাবে, এটি কমপক্ষে পরিমিতভাবে দক্ষতার সাথে করতে হবে; বিশেষত, প্রোগ্রামটি চতুষ্কোণ সময়ে ("O (n²)") বা আরও ভাল চালাতে হবে । (ঘটনাক্রমে, চতুর্ভুজ থেকে দ্রুত যাওয়া প্রায় নিশ্চিতভাবেই সম্ভব তবে এটি দ্রুততম অ্যালগরিদম নয় , তাই নির্বিঘ্নে সবচেয়ে নিখরচায় অ্যালগরিদম ব্যবহার করতে পারেন যা জটিলতার সীমানার মধ্যে ফিট করে find
ব্যাখ্যা
- যদিও ঘটনামূলক প্রোগ্রামগুলিতে তাত্ত্বিকভাবে 256 টি অক্টেটের একটি থাকতে পারে তবে আপনার প্রোগ্রামটির জন্য প্রিন্টযোগ্য এএসসিআইআই (স্থান সহ), প্লাস নিউলাইন এবং ট্যাব কেবলমাত্র ইনপুটগুলি পরিচালনা করা আপনার প্রোগ্রামটির জন্য এই চ্যালেঞ্জের উদ্দেশ্যে গ্রহণযোগ্য। (সমস্ত পরিচিত ঘটনা প্রোগ্রামগুলি নিজেকে এই উপসেটটিতে সীমাবদ্ধ করে)। মনে রাখবেন যে স্থান / নিউলাইন / ট্যাবটি বিশেষ নয় এবং টোকেনের মাঝখানে উপস্থিত হতে পারে; ঘটনাটি 256 টি অক্টোটকে অস্বচ্ছ হিসাবে বিবেচনা করে।
- "চতুর্ভুজ সময়" এর সংজ্ঞাটি হ'ল "যদি ইনপুটটির আকার দ্বিগুণ করা হয় তবে প্রোগ্রামটি ধ্রুবক প্লাস 4 এর গুণক ছাড়া আর ধীরে চলবে না, অর্থাত্ যদি টি ( এক্স ) আপনার প্রোগ্রামে সর্বাধিক সময় নেয় আকার x এর একটি ইনপুট প্রক্রিয়া করুন , তারপরে অবশ্যই কিছু ধ্রুবক কে থাকতে হবে যা সমস্ত x এর জন্য টি (2 x ) <4 টি ( এক্স ) + কে হবে । মনে রাখবেন যে স্ট্রিংগুলির তুলনা করতে স্ট্রিংগুলির দৈর্ঘ্যের সাথে সমানুপাতিক সময় লাগে।
- আপনার প্রোগ্রামটি তাত্ত্বিকভাবে কোনও ভাষার দৈর্ঘ্যের ইনপুট প্রোগ্রামগুলি পরিচালনা করতে সক্ষম হতে পারে (সম্ভবত অনুমানের) আপনার ভাষার যে কোনও সীমাহীন মেমরি রয়েছে এবং আনবাউন্ডেড পূর্ণসংখ্যা ব্যবহার করে (ঠিক আছে যদি প্রোগ্রামটি অনুশীলনে চালিত হওয়ার সময় এই লক্ষ্য অর্জনে ব্যর্থ হয় তবে) ভাষার পূর্ণসংখ্যা বা মেমরি আসলে চূড়ান্তভাবে বড়) আপনি ধরে নিতে পারেন (জটিলতা নিরূপণের উদ্দেশ্যে) যে ইনপুটগুলির দৈর্ঘ্যের চেয়ে বড় নয় এমন পূর্ণসংখ্যাকে ধ্রুবক সময়ের সাথে তুলনা করা যায় (যদিও মনে রাখবেন যে আপনি যদি বৃহত্তর মান ব্যবহার করেন, উদাহরণস্বরূপ ইনপুটকে রূপান্তর করার কারণে একক পূর্ণসংখ্যা, তারা যে সংখ্যার সাথে আছে তার সংখ্যার সাথে আনুপাতিক তুলনা করতে দীর্ঘ সময় নিবে)।
- উপরে বর্ণিত অ্যালগরিদমের মতো একই পদক্ষেপগুলি অনুসরণ না করা সত্ত্বেও জটিলতার সীমার মধ্যে উপযুক্ত যে কোনও অ্যালগরিদম ব্যবহার করতে পারেন, যতক্ষণ না এটি একই ফলাফল তৈরি করে।
- এই ধাঁধাটি ইনপুট টোকনাইজিং সম্পর্কে, আউটপুটকে ফর্ম্যাট করার বিষয়ে নয়। যদি আপনার ভাষায় কোনও তালিকা আউটপুট করার সবচেয়ে প্রাকৃতিক উপায়ে একটি দ্ব্যর্থহীন বিন্যাস জড়িত (যেমন স্ট্রিংগুলিতে আক্ষরিক নিউলাইনগুলি থাকে বা স্ট্রিংগুলির মধ্যে সীমানা ছাড়াই থাকে) তবে আউটপুটটি দ্ব্যর্থহীন হয়ে যায় এই বিষয়টি নিয়ে চিন্তা করবেন না ( যতক্ষণ না তালিকার প্রকৃতপক্ষে নির্মিত হয়)। আপনি পরীক্ষার ক্ষেত্রে সহায়তা দেওয়ার জন্য আপনার জমা দেওয়ার দ্বিতীয় সংস্করণ তৈরি করতে চাইতে পারেন যা দ্ব্যর্থহীন আউটপুট উত্পাদন করে, তবে আসল সংস্করণটি এমন সংস্করণ যা স্কোরিংয়ের জন্য গণনা করা।
পরীক্ষা ক্ষেত্রে
নিম্নলিখিত ইনপুট স্ট্রিংয়ের জন্য:
aaabcbcbcdefdfefedghijghighjkllkklmmmmonono-nonppqpq-pqprsrsrstststuvuvu
আপনার প্রোগ্রামটি নিম্নলিখিত আউটপুট তালিকা উত্পাদন করা উচিত:
a a a bc bc bc d e f d f e f e d gh gh gh k l l k k l pq pq pq u u u
বিজয় শর্ত
এটি কোড-গল্ফ , তাই সংক্ষিপ্ততম বৈধ (যেমন সঠিক ইনপুট / আউটপুট আচরণ এবং কার্যকর করার জন্য যথেষ্ট দ্রুত) প্রোগ্রাম, বাইট, জিতে পরিমাপ করা।