یک سالِ پرماجرا و پرفناوری بعد...

امیرعوس (AmirOsssss) که زمانی از شرکت‌کنندگان خفن و کاربلد سری اول #المپیک‌فناوری پردیس بود، حال پس از گذشت یک سال پرماجرا و پرفناوری و سفید شدن تعداد زیادی از مو‌هایش، خود به عضوی تاثیرگذار و ارزشمند از کوئرا تبدیل شده و امسال عضوی از تیم طراحان و برگزار‌کنندگان سری دوم #المپیک‌فناوری پردیس است. او که تجربه‌‌ی بسیاری در شرکت و برگزاری ایونت‌های خاص برنامه‌نویسی و هوش‌مصنوعی دارد، از سمت باقر (Bagher) به عنوان مدیر تدارکات این سری از رویداد کشوری المپیک‌فناوری منصوب شده است.

زبان ایونتی امیرعوس ترکیبی از نمادها و نشانه‌هایی است که مشابه الفبای انگلیسی عادی هستند. او از یک ترتیب جدید به نام کوئرانومریک (Queranumeric) به‌جای ترتیب دیکشنری (Alphanumeric)، برای مرتب‌سازی اسامی شرکت‌کنندگان استفاده می‌کند؛ سیستمی که در آن نمادها و کاراکترها، طبق یک ترتیب خاص از پیش تعیین‌شده، اولویت خواهند داشت. از آن‌جایی که امیرعوس امسال به دلیل برگزاری المپیک‌فناوری به صورت بین‌المللی حسابی مشغول است، از شما می‌خواهد تا برنامه‌ای بنویسید که اسامی تیم‌های شرکت‌کننده مسابقات را به گونه‌ای مرتب کند که ترتیب آن‌ها بر اساس جایگاه حروف در ترتیب کوئرانومریک مشخص شود.

تصویر سوال اول

پروژه‌ی اولیه

برای دانلود پروژه‌ی اولیه روی این لینک کلیک کنید.

جزئیات پروژه

در ابتدا ترتیب کوئرانومریک به صورت یک رشته به شما داده می‌شود که شامل کاراکترهای خاص و دلخواه است (ممکن است حروف، اعداد یا نمادهای دیگر هم باشد). سپس به ترتیب \(n\) رشته، که اسامی تیم‌های شرکت‌کنندگان المپیک‌فناوری هستند، ورودی داده می‌شود. شما باید این اسامی را به گونه‌ای مرتب کنید که ترتیب آن‌ها بر اساس جایگاه حروف در ترتیب کوئرانومریک مشخص شود.

اگر دو رشته در بخشی از مقایسه مساوی باشند (مثلاً چند حرف اول‌شان یکسان باشد)، از کاراکتر بعدی برای تصمیم‌گیری استفاده می‌شود. همچنین اگر یکی از اسامی پیش از تمام‌شدن مقایسه تمام شود (یعنی کوتاه‌تر باشد)، آن رشته کوچک‌تر در نظر گرفته می‌شود.

دو عدد صحیح و مثبت \(n\) و \(l\) به ترتیب نمایانگر تعداد تیم‌ها و بیشترین طول مجاز برای اسم یک تیم می‌باشند و تضمین می‌شود در بازه‌ی عددی زیر قرار دارند:

\[ 0 \le n \le 4000 \] \[ 1 \le l \le 5000 \]

ورودی

توجه داشته باشید که این مسئله ورودی استاندارد ندارد. به‌جای آن، تابع زیر را در فایل solution.py پیاده‌سازی کنید. این تابع ورودی‌ها را به‌صورت آرگومان توسط سیستم داوری، دریافت خواهد کرد.

def queranumeric(order: list[str], words: list[str]) -> list[str]:
    return []
  • پارامتر order: لیستی از کاراکترهای بدون تکرار است که ترتیب کوئرانومریک را مشخص می‌کند؛ عنصر اول بااولویت‌ترین کاراکتر و به همین ترتیب تا انتها و عنصر انتهایی، کمترین اولویت را در مرتب‌سازی خواهد داشت.

  • پارامتر words: لیستی از رشته‌ها، که همان اسامی تیم‌های شرکت‌کننده هستند، که باید بر اساس ترتیب کوئرانومریک مرتب شوند.

نکته: اگر کاراکتری در words وجود داشته باشد که در order نیامده است، آن کاراکتر، کم‌اهمیت‌تر از همه‌ی کاراکترهای موجود در order در نظر گرفته خواهد شد.

خروجی

تابع باید لیستِ جدیدِ مرتب‌شده از اساسی تیم‌های شرکت‌کننده را مطابق ترتیب کوئرانومریک برگرداند (return کند).

مثال

ورودی نمونه‌ ۱

order = list("cba")
words = ["a", "ba", "cc"]
queranumeric(order, words)

خروجی نمونه ۱

["cc", "ba", "a"]
  • در این مثال، ترتیب کوئرانومریک "cba" است؛ یعنی اولویت کاراکترها به‌ترتیب c، بعد b و در نهایت a است. هنگام مرتب‌سازی، ابتدا حرف اول هر رشته را با هم مقایسه می‌کنیم: "cc" با c شروع می‌شود و چون c بالاترین رتبه را دارد، هر رشته‌ای که با c شروع شود جلوتر قرار می‌گیرد؛ پس "cc" اول می‌آید. بین دو رشته‌ی باقی‌مانده، "ba" با b شروع می‌شود که از a مهم‌تر است، بنابراین "ba" قبل از "a" می‌آید.

ورودی نمونه ۲

order = list("namrepus")
words = ["sun", "man", "super", "name", "user", "spam", "ram"]
queranumeric(order, words)

خروجی نمونه ۲

["name", "man", "ram", "user", "spam", "sun", "super"]
  • در اینجا ترتیب کوئرانومریک "namrepus" است؛ یعنی اولویت از n شروع و به‌ترتیب a، m، r، e، p، u و در نهایت s است. ابتدا "name" که با n شروع می‌شود در ابتدای لیست مرتب‌شده قرار می‌گیرد، چون بالاترین اولویت را دارد. سپس رشته‌هایی که با a، m و r شروع می‌شوند به‌ترتیب می‌آیند: "man" (شروع با m) قبل از "ram" (شروع با r) قرار می‌گیرد چون m در رتبه‌ی بالاتری از r است. باقی رشته‌ها با u و s شروع می‌شوند که در انتهای ترتیب هستند؛ طبق اولویت، رشته‌های شروع‌شده با u ("user") قبل از رشته‌های شروع‌شده با s ("spam", "sun", "super") می‌آیند و در میان s-ها، مقایسه به حروف بعدی کشیده می‌شود که ترتیب "spam", "sun", "super" را رقم می‌زند.

آن‌چه باید آپلود کنید

  • توجه: پس از پیاده‌سازی تابع خواسته شده، فایل solution.py را برای سیستم داوری ارسال کنید.
  • توجه: شما مجاز به افزودن فایل جدیدی در این ساختار نیستید و تنها باید تغییرات را در فایل‌ solution.py اعمال کنید.
  • توجه: ایجاد هرگونه تغییرات اضافی در امضا (Signature) و خروجی تابع queranumeric که خارج از تعریف سوال باشد، در سیستم داوری مورد پذیرش قرار نگرفته و نمره‌ای دریافت نخواهد کرد.
  • توجه: فایل solution.py نباید هیچ عملکرد اضافه‌ای برای گرفتن ورودی استاندارد (stdin) و دادن خروجی استاندارد (stdout) مانند print کردن پاسخ را شامل باشد، در غیر این صورت نمره‌ای دریافت نخواهد کرد. سیستم داوری خود مسئول فراخوانی تابع queranumeric، دادن آرگومان‌های ورودی به آن و بررسی خروجی می‌باشد.
ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.