آلارم بیداری


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

امین در زمان t1t_1 تصمیم می‌گیرد یک آلارم بیدار باش برای ساعت t2t_2 تنظیم کند. این اپلیکیشن برای اینکه ابهام و اشتباهی در کار پیش نیاید، باید به او بگویید که چقدر بعد، این آلارم برای اولین بار زنگ می‌خورد.

برای مثال اگر در لحظه‌ی 15:41:30 (ساعت ۱۵ و ۴۱ دقیقه و ۳۰ ثانیه) آلارم را برای ساعت 18:00:00 (ساعت ۱۸) تنظیم کنیم. باید بگویید این آلارم 02:18:30 (۲ ساعت و ۱۸ دقیقه و ۳۰ ثانیه) دیگر برای اولین بار زنگ می‌خورد.

توجه کنید ممکن است زمان ست شدن، قبل از زمان فعلی باشد و یعنی اولین بار در فردای آن روز زنگ می‌خورد. همچنین اگر زمان t1t_1 و t2t_2 یکسان بود، فردای آن روز را اعلام کند.

ورودی🔗

در سطر اول ورودی، t1t_1 و در سطر دوم ورودی t2t_2 آمده که هر دو به فرمت hh:mm:ss است.

تضمین می‌شود که ss، mm بین ۰ تا ۵۹ است و hh بین ۰ تا ۲۳ است.

خروجی🔗

در یک سطر، نشان دهید چند وقت بعد ساعت زنگ می‌خورد. فرمت خروجی مانند ورودی‌ها باشد.

مثال🔗

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

03:05:18
09:30:00
Plain text

خروجی نمونه ۱🔗

06:24:42
Plain text

آلارم در لحظه‌ی 03:05:18 تنظیم شده که برای 09:30:00 زنگ بخورد پس ۶ ساعت و ۲۴ دقیقه و ۴۲ ثانیه دیگر برای اولین بار زنگ می‌خورد.

ورودی نمونه ۲🔗

13:00:00
06:00:00
Plain text

خروجی نمونه ۲🔗

17:00:00
Plain text

آلارم در ساعت ۱۳ تنظیم شده که برای ساعت ۶ زنگ بخورد پس ۱۷ ساعت دیگر برای اولین بار زنگ می‌خورد.

دیتاست


  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

در یک دیتاست nn رشته باینری به طول \ell ذخیره شده است. همچنین به هرکدام از این رشته‌ها Y یا N نسبت داده‌ایم.

حال به شما qq رشته‌ی باینری به طول \ell داده می‌شود و از شما می‌خواهیم بررسی کنید، کدامیک Y یا N هستند. اگر یک رشته‌ای در دیتاست وجود نداشت، رشته‌ی Unknown را خروجی می‌دهیم.

ورودی🔗

در سطر اول ورودی سه عدد صحیح nn و qq و \ell که با یک فاصله از هم جدا شده‌اند آمده است.

1n,q10000,11001 \leq n, q \leq 10 \, 000, \quad 1 \leq \ell \leq 100

در nn سطر بعدی، در هر سطر یک رشته به طول \ell از کاراکترهای 0 و 1 به شما داده می‌شود و سپس با یک فاصله یکی از کاراکترهای Y و N داده می‌شود.

تضمین می‌شود هیچ دوتایی از این nn رشته باهم برابر نباشد.

در qq سطر بعدی، در هر سطر یک رشته به طول \ell از کاراکترهای 0 و 1 به شما داده می‌شود.

خروجی🔗

خروجی qq سطر دارد و در هر سطر، کاراکتر متناظر با رشته را چاپ کنید و اگر این رشته در آن nn رشته نبود Unknown را چاپ کنید.

مثال🔗

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

5 4 3
000 Y
011 N
100 Y
010 Y
110 N
011
110
111
100
Plain text

خروجی نمونه ۱🔗

N
N
Unknown
Y
Plain text

کوئری‌های کوئراشاپ


اخیراً کوئرا فروشگاهی به نام کوئراشاپ تأسیس کرده و می‌خواهد دسترسی راحتی به اطلاعاتی که در پایگاه‌داده‌ی فروشگاه ذخیره شده، داشته باشد. بنابراین قصد داریم تعدادی کوئری برای دریافت این اطلاعات بنویسیم.

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

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های این پروژه به‌صورت زیر است.

querashop_queries
├── store
│   ├── fixtures
│   │   └── store.json
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├──  > queries.py < 
│   ├── tests.py
│   └── views.py
├── querashop_queries
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── tests
│   ├── __init__.py
│   └── tests_sample.py
├── manage.py
└── requirements.txt
Plain text

پیش‌گفتار🔗

پایگاه‌داده و مدل‌ها از پیش طراحی شده‌اند و جزئیات آن به صورت زیر است.

  • شرکت/Company

    • نام (رشته)
    • تلفن (رشته)
    • ایمیل (رشته)
  • محصول/Product

    • شرکت (کلید خارجی)
    • نام (رشته)
    • قیمت (عدد صحیح)
    • تعداد (عدد صحیح)
    • تخفیف (عدد صحیح)
    • فروخته‌شده (عدد صحیح)
  • کارمند/Employee

    • نام (رشته)
    • نام خانوادگی (رشته)
    • سن (عدد صحیح)
    • شغل (رشته)
  • مشتری/Customer

    • نام (رشته)
    • تلفن (رشته)
    • سطح (رشته)
  • سفارش/Order

    • محصول (کلید خارجی)
    • مشتری (کلید خارجی)
    • زمان (تاریخ و زمان)
    • قیمت (عدد صحیح)

جزئیات طراحی مدل‌ها را در فایل models.py در پروژه‌ی اولیه مطالعه کنید.

اطلاعات کاربردی برای فروشگاه🔗

۱. کوئری‌ست کارمندان با سن کمتر از ۳۰ سال که شغل داده‌شده را دارند

۲. لیست اسامی کالاهایی که قیمت آن‌ها از میانگین قیمت تمام محصولات فروشگاه کمتر است (به ترتیب صعودی قیمت)

۳. کوئری‌ست نام هر شرکت و تعداد کل محصولات فروخته‌شده (شامل تاپل‌هایی به صورت (name, sold))

۴. مجموع درآمد فروشگاه بین دو تاریخ داده‌شده

۵. کوئری‌ست نام و شماره‌ی موبایل مشتریان طلایی‌ای که در یک ماه گذشته بیش از ۱۰ خرید داشته‌اند (شامل تاپل‌هایی به صورت (name, phone))

۶. لیست نام تمام شرکت‌هایی که حداقل ۴ محصول آن‌ها کمتر از ۱۰۰ عدد فروش داشته است

امکانات اضافه🔗

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

علاوه‌بر این، یک سری داده‌ی ازپیش‌آماده‌شده، فراهم شده که بعد از اجرای دستور migrate، می‌توانید آن‌ها را وارد پایگاه‌داده‌ی پروژه‌ی خود کنید. به این منظور، دستور زیر را اجرا کنید. می‌توانید از این داده‌ها به جهت تست کردن کوئری‌های خود استفاده کنید.

۱. ایجاد پایگاه‌داده

python manage.py migrate
Bash

۲. وارد کردن داده‌های ازپیش‌آماده‌شده (fixture)

python manage.py loaddata store/fixtures/store.json
Bash

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

نکات مهم🔗

  • شما تنها مجوز ایجاد تغییرات در فایل queries.py را دارید و تمامی تغییرات دیگر شما در فایل‌های پروژه نادیده گرفته خواهند شد. توجه داشته باشید که تمامی بسترهای پروژه آماده شده و کافی‌ست که شما تنها فایل queries.py را کامل کنید.
  • فراموش نکنید که می‌توانید با مطالعه‌ی فایل‌های models.py با ساختار پایگاه‌داده، و با مطالعه‌ی test_sample.py با روش تست کوئری‌ها آشنا شوید.

نحوه‌ی ارسال🔗

این سؤال از نوع سوالات تک‌فایل است؛ برای ارسال جواب، فایل پایتونی را که در آن موارد خواسته‌شده قرار دارد را انتخاب و سپس ارسال نمایید.

کلاس‌ها


در مدرسه‌ی کوئرا، کلاس‌هایی وجود دارند که باید آن‌ها را با استفاده از APIهایی که در آینده نوشته خواهند شد در سیستم ثبت کنیم. تکمیل سریالایزر مدل Classroom به فرهاد محول شده است. برای اطمینان از درستی کار فرهاد، به کمک شما برای تست سریالایزر فرهاد نیاز داریم.

شما باید تست‌/تست‌هایی بنویسید که درستی کد فرهاد را بررسی کند.

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

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

school
├── classes
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── models.py
│   ├── serializers.py
│   ├──   > temp_tests_file.py < 
│   ├── tests.py
│   └── views.py
├── config
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── __init__.py
├── manage.py
├── requirements.txt
└── tests
    ├── __init__.py
    ├── sample.py
    └── testsample.py
Plain text

ایجاد سریالایزر برای Classroom🔗

فرهاد باید سریالایزری بر مبنای مدل Classroom به نام ClassroomSerializer ایجاد کند که ۲ محدودیت زیر حتماً در لایه‌ی سریالایزر در نظر گرفته شوند.

  • فیلد capacity نمی‌تواند مقدار کمتر از ۵ داشته باشد. (مقادیر صحیح: اعداد بزرگ‌تر یا مساوی ۵)
  • فیلد area نمی‌تواند مقدار منفی داشته باشد. (مقادیر صحیح: اعداد بزرگ‌تر یا مساوی ۰)

نکات مهم🔗

  • شما تنها مجوز ایجاد تغییرات در فایل‌های ذکر شده (زرد‌ رنگ) در درخت بالا را دارید و بقیه‌‌ی تغییرات شما در فایل‌های پروژه نادیده گرفته خواهند شد.
  • توجه نمایید که باید تست‌های خود را در فایل temp_tests_file.py در اپ classes بنویسید؛ نه در فایل tests.py.
  • تست‌های سیستم داوری برای تست کردن تست‌هایی‌ست که شما نوشته‌اید.
  • محدودیتی در نام و تعداد تست‌ها وجود ندارد.
  • تست‌های که می‌نویسید باید با سریالایزر درست pass و با سریالایزر غلط حداقل یکی از آن‌ها fail شود.
  • برای دریافت نمره‌ی این سوال، باید تمامی تست‌ها را پاس کنید و هر تست به صورت جداگانه نمره‌ای نخواهد داشت.

نحوه‌ی ارسال🔗

این سؤال از نوع سوالات تک‌فایل است؛ برای ارسال جواب، فایل پایتونی را که در آن موارد خواسته‌شده قرار دارد را انتخاب و سپس ارسال نمایید.

خورشت کرفس


فرهاد که به اندازه‌ی کافی با سلری و جنگو آشنا نیست برای انجام پروژه زیر به کمک شما نیاز دارد.

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

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های این پروژه به‌صورت زیر است:

Subscription
├── accounts
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_user_special_user_alter_user_email.py
│   │   ├── 0003_alter_user_special_user.py
│   │   ├── 0004_user_task_id.py
│   │   └── __init__.py
│   ├──  > models.py < 
│   ├── tasks.py
│   ├── tests.py
│   └── views.py
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_article_views_alter_article_category.py
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └──  > views.py < 
├── config
│   ├── asgi.py
│   ├── celery.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── docker-compose.yml
├── Dockerfile
├── manage.py
├── Pipfile
├── Pipfile.lock
├── requirements-dev.txt
├── requirements.txt
├── static
│   └── blog
│       └── css
│           └── article_detail.css
├── templates
│   └── blog
│       ├── article_create.html
│       └── article_detail.html
└── tests
    └── __init__.py
Plain text

فایل accounts/models.py🔗

مدل User در فایل accounts/models.py را به‌نحوی تغییر دهید تا زمانی که اشتراک کاربر به اتمام رسید، ایمیلی به کاربر ارسال شود. از تسک ارسال ایمیل در فایل accounts/tasks.py استفاده کنید.

فایل blog/views.py🔗

ویو‌ی ArticleCreateView در فایل blog/views.py را به‌نحوی تغییر دهید که:

  • فقط کاربران احرازهویت‌شده (کاربرانی که log-in کرده‌اند) به آن دسترسی داشته باشند.
  • فیلد author فقط برای کاربران ادمین (‍superuser) وجود داشته باشد. برای کاربران عادی این فیلد نمایش داده نشود و مقدار آن برابر خود کاربر باشد.
  • فیلد status فقط برای کاربران ادمین (‍superuser) وجود داشته باشد. برای کاربران عادی این فیلد نمایش داده نشود و مقدار آن برابر d باشد.
تکمیلی

فیلدهای قابل ویرایش برای:

کاربر ادمین:author, title, slug, body, status, category, is_premium

کاربر عادی:title, slug, body, category, is_premium

  • در تمپلیت blog/article_create.html رندر شود.

نحوه ارسال🔗

برای حل سوال یک فایل ZIP که شامل کلیه فایل‌های موجود در پروژه است، ارسال کنید.