تو معجون گل و مخمل و نوری ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌ سعیده‌ی قصه‌های حوری

‌ تموم محصولا بی تو می‌میرن ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌ ‌ ‌ ‌که تو حوصله سنگ صبوری

تو رو می‌طلبم لحظه به لحظه ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌ ‌ ‌ ‌تویی تاب و تبم لحظه به لحظه

محصولات شهر منه که شهر قصه است ‌‌‌ ‌ ‌ ‌‌‌‌ ‌‌‌ ‌ ‌ ‌‌‌‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌ ‌ ‌‌ ‌‌ ‌ ‌ ‌برای کوئرا لحظه به لحظه

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

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

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

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

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

جزئیات پروژه

تابعی که شما باید در این سؤال پیاده‌سازی کنید، تابع saeedeh_pyramid است. این تابع تنها یک آرگومان ورودی s دریافت می‌کند که رشته‌ای از کاراکترها (حروف، اعداد یا نمادها) است. هدف تابع، تبدیل این رشته (که مجموعه‌ای مشکلات در کوئراست) به ساختاری هرمی‌ شکل معکوس است که در آن هر سطر، بخشی از رشته را با طولی مشخص نمایش می‌دهد. تعداد کاراکترهای هر سطر بر اساس مجموع دنباله‌ی اعداد طبیعی (یعنی ۱، ۱+۲، ۱+۲+۳، و به همین ترتیب) تعیین می‌شود. اگر در یک سطر، طول رشته برای پر کردن کامل آن کافی نباشد، با کاراکتر # جای خالی‌ها پر می‌شود تا شکل منظم هرم حفظ گردد.

در انتهای پردازش، تمام سطرها به ترتیب معکوس به هم متصل شده و با کاراکتر \n از هم جدا می‌شوند تا خروجی به‌صورت یک رشته‌ی چندخطی بازگردانده (return) شود. بدین ترتیب، خروجی نهایی از بالا به پایین کوچک‌تر می‌شود، گویی رأس هرم در پایین قرار دارد. برای مثال، اگر رشته‌ای مانند "abcdefg" به تابع داده شود، تابع ابتدا آن را به بخش‌هایی با طول‌های ۱، ۲، ۳ و ... تقسیم می‌کند تا زمانی که طول رشته کافی باشد. سپس این بخش‌ها را برعکس کرده و با استفاده از # جای خالی‌ها را پر می‌کند تا خروجی نهایی الگویی منظم و بصری از یک هرم معکوس ایجاد کند.

ورودی

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

def saeedeh_pyramid(s: str) -> str: return None

پارامتر s: یک رشته‌ی متنی شامل مجموعه‌ای از حروف، اعداد یا نمادهاست که قرار است به ساختاری هرمی تبدیل شود. این رشته می‌تواند طول دلخواهی داشته باشد و هیچ محدودیتی از نظر نوع کاراکترها ندارد. تابع باید بر اساس الگوی از پیش تعیین‌شده، کاراکترهای این رشته را در چندین سطر به ترتیب‌های خاص قرار دهد تا خروجی نهایی به شکل یک هرم معکوس نمایش داده شود.

در فرایند ساخت هرم، طول هر سطر با استفاده از مجموع متوالی اعداد طبیعی (۱، ۱+۲، ۱+۲+۳ و به همین ترتیب) تعیین می‌شود. برای هر مرحله، از موقعیت حاصل از این مجموع برای بریدن بخش موردنظر از رشته استفاده می‌شود. اگر در انتهای رشته کاراکتر کافی برای پر کردن کامل آن سطر وجود نداشته باشد، باید با کاراکتر# جای خالی‌ها پر شود تا ساختار منظم باقی بماند.

نکته: ترتیب سطرها در نهایت باید برعکس شود، یعنی آخرین بخش ساخته‌شده در بالای خروجی و اولین بخش در پایین قرار گیرد. این موضوع باعث می‌شود که هرم به‌صورت معکوس نمایش داده شود. خروجی نهایی باید رشته‌ای باشد که سطرها با کاراکتر \n از هم جدا شده‌اند.

خروجی

برگرداندن (return کردن) وارونه‌ی هرم مشکل‌گشای سعیده، به‌طوری که در هر خط بخشی از رشته (به اندازه‌ی طول خط از بالا به پایین) قرار گیرد و اگر طول رشته برای پر کردن خط کافی نبود، جای خالی با # پر شود.

مثال

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

saeedeh_pyramid("AaBbCc123")

خروجی نمونه ۱

'123#\nbCc\naB\nA'

# 123#
# bCc
# aB
# A
  • در این مثال، رشته‌ی '123bCcaBA' به تابع داده شده‌است تا به شکل یک هرم مشکل‌گشا نمایش داده شود. هر خط از خروجی شامل تعداد حروفی از رشته است که بر اساس دنباله‌ی دنباله‌ی اعداد طبیعی تا آن خط انتخاب شده و در صورت کوتاهی با # پر می‌شود. در هنگام چاپ، خروجی نهایی با \n جدا شده و به‌صورت معکوس چاپ می‌شود، به طوری که آخرین قطعه‌ی رشته در بالا قرار می‌گیرد و اولین قطعه در پایین. این باعث می‌شود رشته به شکل یک هرم وارونه با لایه‌های متفاوت طول ظاهر شود. در خروجی نمونه، اولین خط '123#' بزرگ‌ترین لایه است که با # پر شده، دومین خط 'bCc' لایه‌ی بعدی است، سومین 'aB' و آخرین خط 'A' کوچک‌ترین و بالاترین لایه‌ی هرم را تشکیل می‌دهد. ترتیب خطوط و پر کردن با # باعث می‌شود ساختار بصری هرم واضح و قابل تشخیص باشد. همچنین در انتها خروجی در صورت چاپ شدن به صورت بخش کامنت‌شده در قسمت بالا خواهد بود.

ورودی نمونه ۲

saeedeh_pyramid("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")

خروجی نمونه ۲

'TUVWXYZ####\nJKLMNOPQRS\nABCDEFGHI\n23456789\nvwxyz01\npqrstu\nklmno\nghij\ndef\nbc\na'

# TUVWXYZ####
# JKLMNOPQRS
# ABCDEFGHI
# 23456789
# vwxyz01
# pqrstu
# klmno
# ghij
# def
# bc
# a
  • در این مثال، رشته‌ی ورودی شامل تمام حروف الفبا به همراه اعداد و حروف بزرگ انگلیسی است و به تابع داده شده تا به شکل هرم مشکل‌گشا تجزیه و چاپ شود. هر لایه‌ی هرم شامل تعداد مشخصی از کاراکترهاست که بر اساس دنباله‌ی اعداد طبیعی انتخاب شده و در صورت کوتاهی با # پر می‌شود. خروجی به صورت معکوس تولید می‌شود، به طوری که بزرگ‌ترین لایه در پایین هرم قرار دارد و کوچک‌ترین لایه در بالای هرم. اولین خط خروجی 'TUVWXYZ####' شامل کاراکترهای انتهای رشته و پر شدن با # است تا طول لایه کامل شود، خط دوم 'JKLMNOPQRS' لایه‌ی بعدی و به همین ترتیب ادامه می‌یابد. خطوط میانی شامل حروف بزرگ و اعداد هستند و خطوط پایین هرم حروف کوچک را نمایش می‌دهند. این ترتیب معکوس باعث می‌شود هرم از پایین به بالا بزرگ و کوچک شود و الگوی بصری هرم حفظ شود. همچنین در انتها خروجی در صورت چاپ شدن به صورت بخش کامنت‌شده در قسمت بالا خواهد بود.

زیرمسئله‌ها

سیستم داوری برای این سوال به زیرمسئله‌های زیر برای نمره‌دهی تقسیم‌بندی شده است که می‌توانید امتیاز مربوط به هر کدام را در جدول زیر مشاهده کنید. زیرمسئله‌های این جدول ابتدا بر اساس اولویت و پیشنیازی پیاده‌سازی و سپس بر اساس امتیاز آن‌ها مرتب‌سازی شده‌اند. لذا پیشنهاد می‌شود در پیاده‌سازی از زیرمسئله‌ی ابتدایی آغاز کنید.

زیرمسئله امتیاز
پیاده‌سازی تابع saeedeh_pyramid 200

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

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