یک سالِ پرماجرا و پرفناوری بعد...
امیرعوس (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
، دادن آرگومانهای ورودی به آن و بررسی خروجی میباشد.
ارسال پاسخ برای این سؤال