در این سوال به شما دو عدد صحیح مثل و داده میشود. از شما میخواهیم برنامهای بنویسید که مقدار و را دریافت کند و را چاپ کند.
در تنها سطر ورودی، دو عدد صحیح و که با یک فاصله از هم جدا شدهاند، داده میشود.
در تنها سطر خروجی، مقدار را چاپ کنید.
Python 3.12
نیازی نیست چک کنید شرایط گفته شده در ورودی برقرار است یا نه. توضیحات محدودیتها فقط برای آگاهی شما دربارهی تستها و محدودیتهای مسئله است و قطعاً در ورودیهای داده شده به برنامهی شما رعایت میشوند. پس نیازی نیست بنویسید:
شما میتوانید لابهلای دریافت ورودی، خروجی دهید. پس نیازی نیست ابتدا همهی ورودیها را دریافت کنید و در نهایت همهی خروجیها را چاپ کنید. مخصوصاً برای سوالاتی که باید به چندین سوال پاسخ دهید، میتوانید دو قسمت ورودی و خروجی را کاملاً مستقل در نظر بگیرید و مطمئن باشید تداخلی پیش نمیآید.
لطفاً از چاپ کردن موارد اضافه مثل please enter a number
برای دریافت ورودی پرهیز کنید. برای مثال در زبان پایتون نباید بنویسید:
برای آشنایی بیشتر برای نحوهی دریافت ورودی و چاپ کردن خروجی این لینک را مطالعه کنید.
در فایلهای شرکت شبکه الکترونیکی پرداخت کارت، که به نام شاپرک شناخته میشود، یک عبارت ریاضی نوشته شده بود. متأسفانه این عبارت بدون پرانتزگذاری بوده و به دلیل بهروزرسانی سیستمها، علامتهای ریاضی آن به تغییر کرده است.
اکنون با یک رشته به صورت مواجه هستیم که بهجای ، و اعداد طبیعی قرار گرفتهاند. هدف این است که به جای دو علامت در این عبارت، عملگرهای یا را قرار دهیم و سپس با پرانتزگذاری مناسب، بیشترین مقدار ممکن از عبارت را به دست آوریم.
مقادیر ، و به شما داده میشود و باید برنامهای بنویسید که بیشترین مقدار ممکن برای این عبارت را محاسبه کند. برای درک بهتر خواستهی مسئله، توضیحات نمونه را مشاهده کنید.
در تنها سطر ورودی، یک رشته به صورت است که در آن به جای ، و اعداد طبیعی قرار دارند.
در تنها سطر خروجی، یک عدد صحیح برابر بیشترین مقدار ممکن برای عبارت داده شده را چاپ کنید.
برای عبارت اگر همهی را به تغییر دهیم، حاصل عبارت میشود که این بیشترین مقدار ممکن است.
برای عبارت اگر اول را به و دوم را به تغییر دهیم، و عبارت را به این صورت پرانتزگذاری کنیم، حاصل میشود که این بیشترین مقدار ممکن است.
شرکت شبکه الکترونیکی پرداخت کارت، که به نام شاپرک شناخته میشود، قصد دارد یک دیوار بزرگ از شرکت خود را رنگآمیزی کند. این دیوار از چندین ردیف آجری مربعی به اندازه تشکیل شده است که به صورت عمودی روی هم قرار گرفتهاند.
برای رنگآمیزی، یک نقاش حرفهای ردیف متوالی از این دیوار را انتخاب کرده و بازههایی از هر ردیف را رنگ کرده است. در ردیف ام، نقاش آجرهای را رنگآمیزی کرده است.
اکنون پس از پایان کار، نقاش میخواهد مرز بین قسمتهای رنگشده و رنگنشده را محاسبه کند تا بتواند حاشیههای این قسمتها را به دقت قلمگیری کند.
وظیفهی شما این است که با توجه به بازههای رنگشده، محیط کل قسمتهای رنگشده را محاسبه و گزارش کنید.
در سطر اول ورودی، یک عدد صحیح و مثبت داده میشود که تعداد ردیفهای رنگشده را نشان میدهد.
در سطر بعدی، در هر سطر دو عدد و داده میشود که ناحیهی رنگ شدهی ردیف ام را نشان میدهد.
در تنها سطر خروجی، یک عدد صحیح که نشاندهندهی محیط کل قسمتهای رنگشده است، چاپ کنید.
هلیا با مشکل کند بودن اجرای توابعش روبهرو شدهاست و میخواهد نتیجهی اجرای توابع را برای مدتی در حافظه نگه دارد تا هربار که تابع را با همان ورودیهای قبلی اجرا میکند، محاسبات تابع از نو اجرا نشوند. به او کمک کنید یک دکوراتور بنویسد که این کار را برای او انجام دهد.
دکوراتور شما (به نام conditional_cache
) باید مدت زمان نگهداری نتایج، شرط نگهداری نتایج و بیشینهٔ حجم کش را ورودی بگیرد. در صورتی که شرط برقرار نبود، تابع موردنظر نباید اجرا شود. در غیر این صورت، اگر نتایج ذخیرهشده منقضی نشده بودند، مقدار ذخیرهشده برگردانده شود و در غیر اینصورت تابع اجرا شود و مقدار جدید آن برگردانده شود.
همچنین برای جلوگیری از دسترسی همزمان به مقادیر ذخیرهشده و ایجاد Race Condition، باید دسترسی به این مقادیر محدود شود و در هر لحظه تنها یک امکان دسترسی به آن وجود داشته باشد.
پروژهی اولیهی این سؤال را میتوانید از این لینک دانلود کنید.
این سؤال از نوع سؤالات تکفایل است. شما باید تابع conditional_cache
موجود در فایل main.py
را تکمیل و سپس این فایل را ارسال کنید.
برگزارکنندگان المپیک میخواهند سامانهای درست کنند که بهراحتی بتوانند اخبار برگزاری و وقایع هر رشته را به خبرگزاریهای مختلف ورزشی اطلاع دهند؛ به این صورت که یک سری پخشکنندهی اخبار دارند که وقایع را منتشر میکنند و یک سری دنبالکنندهی اخبار دارند که بهمحض دریافت خبر، آن را در خبرگزاریشان قرار میدهند. آنها از شما کمک خواستهاند تا در پیادهسازی این سامانه کمک کنید.
شما باید سه کلاس OlympicsServer
، Publisher
و Subscriber
را پیادهسازی کنید و همچنین توابع مشخصشدهی آنها را نیز پیادهسازی کنید. در صورت لزوم میتوانید توابع دیگری به کلاسهایتان اضافه کنید.
هر خبری که منتشر میشود، یک موضوع دارد. بهطور مثال، sports/basketball/groupstage
یک موضوع است؛ یعنی این خبر یک خبر ورزشی در رشتهی بسکتبال و در دور گروهی مسابقات است.
هر خبر یک پیام به همراه خود دارد. بهطور مثال، Football match result: Team A won!
پیامی است که منتشرکننده آن را انتشار میدهد. پیامها بهصورت یک رشته (string
) هستند.
کیفیت سرویس یعنی خبری که منتشر میشود، برای منتشرکننده چه میزان اهمیت دارد که به دست دنبالکنندهاش برسد. بهطور مثال، کیفیت سرویس سطح صفر یعنی برای منتشرکننده هیچ اهمیتی ندارد که پیامش به دنبال کنندهاش رسیده یا نه؛ یعنی پس از انتشار آن را فراموش میکند. ولی کیفیت سرویس سطح یک یعنی برای منتشر کننده مهم است که حداقل پیامش به یک مخاطبش رسیده باشد و رسیدن پیام را حداقل به یک دنبالکننده گارانتی میکند.
منتشرکننده یک کاربر (client) است که خبر را در یک موضوع مشخص، با یک پیام مشخص و یک کیفیت سرویس منتشر میکند. به طور مثال:
دنبالکننده نیز یک کاربر است که یک موضوع مشخص را دنبال میکند و در صورت match شدن موضوعات، تابع callback
را صدا میزند. بهطور مثال:
callback
🔗تابع callback
تابعی است که دنبالکننده پس از اینکه موضوع یک خبر با آن match میشود، آن تابع را صدا میزند. این تابع بهطور مثال میتواند پیام را چاپ کند یا در دیتابیس یا یک لیست اضافه کند. بهطور مثال این یک تابع callback
است که پیام را صرفاً چاپ میکند:
توجه داشته باشید که پیادهسازی این تابع را نیاز نیست انجام دهید و صرفا باید آن را هنگام match شدن تاپیک صدا بزنید.
/sports
به sports/football
دسترسی ندارد.)sports/+
به sports/football
دسترسی دارد ولی به sports/football/finals
دسترسی ندارد.)sports/#
به sports/football
دسترسی دارد و همچنین به sports/football/finals
نیز دسترسی دارد.)سرور به صورت چندنخی (multi-thread) کار میکند و هر خبر در یک نخ منتشر میشود. همچنین برای جلوگیری از race condition یک قفل (lock) در درون سرور قرار دارد که در جای لازم نخها را قفل میکند و همچنین دارای دو تابع اصلی publish
و subscribe
است. این دو تابع اکثر منطق برنامه را در خود جای میدهند و کلاس Publisher
و Subscriber
بهترتیب در خود publish
و subscribe
دارند که با استفاده از توابع متناظر خود در سرور عمل انتشار و دنبال کردن را انجام میدهند.
همچنین به این توجه داشته باشید که سرور باید برای دنبالکنندههایی که در حال حاضر آنلاین نیستند پیام را ذخیره کند. تاپیکها و پیامشان را به صورت آرایهای از تاپل و در فایل messages.pkl
و بهصورت فایل pickle
ذخیره کنید.
این کلاس برای شما پیادهسازی شده است که صرفاً در توابع publish
و subscribe
با ساختن یک کلاس متناظر با آن و صدا کردن تابعش عمل انتشار و دنبال کردن خبر را انجام میدهد.
در اینجا دنبالکننده چون موضوع sports/#
را دنبال کرده است، پس هر خبری که با sports
شروع شود را دریافت و با صدا زدن تابع callback
آن را چاپ میکند.
پروژهی اولیهی این سؤال را میتوانید از این لینک دانلود کنید.
پس از تکمیل پروژه، فایلهای client.py
و server.py
را به صورت یک فایل zip
را ارسال نمایید.
کوئرا تصمیم دارد تا برای کاربران فعال خود چالشی برگزار کند. فرایند این چالش به این صورت است که هرروزه تعدادی مأموریت توسط کوئرا تعیین میشوند و کاربران با انجام دادن آنها، امتیاز و جایزه دریافت خواهند کرد. حال کوئرا برای پیادهسازی فرایند این چالش از شما میخواهد تا به کمکش بیایید.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه بهصورت زیر است.
جایزه (Award
)
name
): نام جایزهdescription
): توضیحاتی درباره جایزهتراکنش جایزه (AwardTransaction
)
Award
): جایزه مرتبط با تراکنشUser
): کاربر دریافت کننده جایزهcreated_at
): تاریخ و زمان ایجاد تراکنشچالش (Challenge
)
title
): عنوان چالشdescription
): توضیحات چالشpoint
): امتیاز چالشAward
): جایزه مرتبط با چالشمورد چالش (ChallengeItem
)
Challenge
): چالش مرتبط با موردtitle
): عنوان مورد چالشdescritption
): توضیحات مورد چالشdate_to_display
): تاریخی که چالش باید به کاربران نمایش داده شود.تراکنش چالش (ChallengeTransaction
)
ChallengeItem
): مورد چالش مرتبط با تراکنشcreated_at
): تاریخ و زمان ایجاد تراکنشupdated_at
): تاریخ و زمان بهروزرسانی تراکنشUser
): کاربر انجام دهنده تراکنشکاربر (User
)
point_earned
): امتیاز کسب شده توسط کاربرChallengeListAPIView
ChallengeListAPIView
ارسال شود، لیستی از چالشها بازگردانده میشود.is_done
: بهطور داینامیک برای هر آیتم چالش تعیین میشود. اگر کاربر برای آیتم چالش خاصی، تراکنش داشته باشد، این فیلد True
را نشان میدهد؛ در غیر این صورت، False
است. این ویژگی به کاربران کمک میکند تا بهراحتی ببینند کدام چالشها را قبلاً تکمیل کردهاند و کدامها را هنوز باید انجام دهند.jalali_date_to_display
: تمامی چالشها براساس اینکه مقدار date_to_display
آنها برابر تاریخ امروز باشد فیلتر و به کلاینت ارسال میشوند. و دقت کنید که این تاریخ با نام jalali_date_to_display
بهصورت شمسی و فرمت Y/m/d
در دیتا قرار میگیرد. برای انجام اینکار حتما باید از کتابخانه jdatetime
کمک بگیرید.CreateChallengeTransactionView
challenge_item_ids
در بدنهی درخواست ارسال میکند. فرمت کلی دیتای ارسالی بهصورت {"challenge_item_ids": []}
است.challenge_item_ids
ارائه شدهاست یا خیر. اگر ارائه نشده باشد، پاسخ HTTP_400_BAD_REQUEST
برمیگرداند.ChallengeItem
مربوط به ID
های ارائهشده را بازیابی میکند و اطمینان حاصل میکند که کاربر قبلاً در این چالشها شرکت نکردهاست.ChallengeTransaction
ایجاد میشود.HTTP_201_CREATED
بازگردانده میشود.برنامه، پس از ذخیره شدن یک ChallengeTransaction
بررسی میکند که آیا کاربر تمام موارد چالش مربوط به یک چالش خاص را تکمیل کردهاست یا خیر. در صورتی که کاربر تمام موارد یک چالش را گذرانده باشد به وی جایزه و امتیازی که در آبجکت آن چالش تعیین شده، تعلق خواهد گرفت.
اختصاص جایزه و امتیاز به این صورت است که یک AwardTransaction
برای کاربر ایجاد میشود و امتیازهای کاربر بهروزرسانی میشود.
نکته: استفاده از سیگنال در فرایند مدیریت امتیاز و اختصاص جوایز الزامیست.
views.py
، serializers.py
و signals.py
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.ChallengeListAPIView
باید حداکثر دو کوئری به پایگاه داده ارسال کند. url
های آن از قبل پیادهسازی شدهاست.transaction.atomic
در سیگنال الزامیست.