+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
امین در زمان $t_1$ تصمیم میگیرد یک آلارم بیدار باش برای ساعت $t_2$ تنظیم کند. این اپلیکیشن برای اینکه ابهام و اشتباهی در کار پیش نیاید، باید به او بگویید که چقدر بعد، این آلارم برای اولین بار زنگ میخورد.
برای مثال اگر در لحظهی `15:41:30` (ساعت ۱۵ و ۴۱ دقیقه و ۳۰ ثانیه) آلارم را برای ساعت `18:00:00` (ساعت ۱۸) تنظیم کنیم. باید بگویید این آلارم `02:18:30` (۲ ساعت و ۱۸ دقیقه و ۳۰ ثانیه) دیگر برای اولین بار زنگ میخورد.
توجه کنید ممکن است زمان ست شدن، قبل از زمان فعلی باشد و یعنی اولین بار در فردای آن روز زنگ میخورد. همچنین اگر زمان $t_1$ و $t_2$ یکسان بود، فردای آن روز را اعلام کند.
# ورودی
در سطر اول ورودی، $t_1$ و در سطر دوم ورودی $t_2$ آمده که هر دو به فرمت `hh:mm:ss` است.
تضمین میشود که `ss`، `mm` بین ۰ تا ۵۹ است و `hh` بین ۰ تا ۲۳ است.
# خروجی
در یک سطر، نشان دهید چند وقت بعد ساعت زنگ میخورد. فرمت خروجی مانند ورودیها باشد.
# مثال
## ورودی نمونه ۱
```
03:05:18
09:30:00
```
## خروجی نمونه ۱
```
06:24:42
```
آلارم در لحظهی `03:05:18` تنظیم شده که برای `09:30:00` زنگ بخورد پس ۶ ساعت و ۲۴ دقیقه و ۴۲ ثانیه دیگر برای اولین بار زنگ میخورد.
## ورودی نمونه ۲
```
13:00:00
06:00:00
```
## خروجی نمونه ۲
```
17:00:00
```
آلارم در ساعت ۱۳ تنظیم شده که برای ساعت ۶ زنگ بخورد پس ۱۷ ساعت دیگر برای اولین بار زنگ میخورد.
آلارم بیداری
+ محدودیت زمان: ۲ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
در یک دیتاست $n$ رشته باینری به طول $\ell$ ذخیره شده است. همچنین به هرکدام از این رشتهها `Y` یا `N` نسبت دادهایم.
حال به شما $q$ رشتهی باینری به طول $\ell$ داده میشود و از شما میخواهیم بررسی کنید، کدامیک `Y` یا `N` هستند. اگر یک رشتهای در دیتاست وجود نداشت، رشتهی `Unknown` را خروجی میدهیم.
# ورودی
در سطر اول ورودی سه عدد صحیح $n$ و $q$ و $\ell$ که با یک فاصله از هم جدا شدهاند آمده است.
$$1 \leq n, q \leq 10 \, 000, \quad 1 \leq \ell \leq 100$$
در $n$ سطر بعدی، در هر سطر یک رشته به طول $\ell$ از کاراکترهای `0` و `1` به شما داده میشود و سپس با یک فاصله یکی از کاراکترهای `Y` و `N` داده میشود.
تضمین میشود هیچ دوتایی از این $n$ رشته باهم برابر نباشد.
در $q$ سطر بعدی، در هر سطر یک رشته به طول $\ell$ از کاراکترهای `0` و `1` به شما داده میشود.
# خروجی
خروجی $q$ سطر دارد و در هر سطر، کاراکتر متناظر با رشته را چاپ کنید و اگر این رشته در آن $n$ رشته نبود `Unknown` را چاپ کنید.
# مثال
## ورودی نمونه ۱
```
5 4 3
000 Y
011 N
100 Y
010 Y
110 N
011
110
111
100
```
## خروجی نمونه ۱
```
N
N
Unknown
Y
```
دیتاست
اخیراً کوئرا فروشگاهی به نام کوئراشاپ تأسیس کرده و میخواهد دسترسی راحتی به اطلاعاتی که در پایگاهدادهی فروشگاه ذخیره شده، داشته باشد.
بنابراین قصد داریم تعدادی کوئری برای دریافت این اطلاعات بنویسیم.
# پروژهی اولیه
پروژهی اولیه را از [این لینک](/contest/assignments/56249/download_problem_initial_project/190962/) دانلود کنید.
ساختار فایلهای این پروژه بهصورت زیر است.
```
querashop_queries
├── store
│ ├── fixtures
│ │ └── store.json
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > queries.py < </mark>
│ ├── 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
```
## پیشگفتار
پایگاهداده و مدلها از پیش طراحی شدهاند و جزئیات آن به صورت زیر است.
- **شرکت/Company**
- نام (رشته)
- تلفن (رشته)
- ایمیل (رشته)
- **محصول/Product**
- شرکت (کلید خارجی)
- نام (رشته)
- قیمت (عدد صحیح)
- تعداد (عدد صحیح)
- تخفیف (عدد صحیح)
- فروختهشده (عدد صحیح)
- **کارمند/Employee**
- نام (رشته)
- نام خانوادگی (رشته)
- سن (عدد صحیح)
- شغل (رشته)
- **مشتری/Customer**
- نام (رشته)
- تلفن (رشته)
- سطح (رشته)
- **سفارش/Order**
- محصول (کلید خارجی)
- مشتری (کلید خارجی)
- زمان (تاریخ و زمان)
- قیمت (عدد صحیح)
جزئیات طراحی مدلها را در فایل `models.py` در پروژهی اولیه مطالعه کنید.
## اطلاعات کاربردی برای فروشگاه
۱. کوئریست کارمندان با سن کمتر از ۳۰ سال که شغل دادهشده را دارند
۲. لیست اسامی کالاهایی که قیمت آنها از میانگین قیمت تمام محصولات فروشگاه کمتر است (به ترتیب صعودی قیمت)
۳. کوئریست نام هر شرکت و تعداد کل محصولات فروختهشده (شامل تاپلهایی به صورت `(name, sold)`)
۴. مجموع درآمد فروشگاه بین دو تاریخ دادهشده
۵. کوئریست نام و شمارهی موبایل مشتریان طلاییای که در یک ماه گذشته بیش از ۱۰ خرید داشتهاند (شامل تاپلهایی به صورت `(name, phone)`)
۶. لیست نام تمام شرکتهایی که حداقل ۴ محصول آنها کمتر از ۱۰۰ عدد فروش داشته است
## امکانات اضافه
درصورتیکه علاقمندید که خودتان به صورت دستی کوئریهای خود را امتحان کنید و از درستی آنها اطمینان حاصل کنید، یا اینکه به بررسی بیشتر از این مسئله بپردازید، برای راحتی بیشتر شما، فایلهای `models.py` و مایگریشنها ساخته شدهاند و شما کافیست که قبل از شروع کار، جهت ایجاد پایگاهداده، یک بار دستور `migrate` را اجرا کنید.
علاوهبر این، یک سری دادهی ازپیشآمادهشده، فراهم شده که بعد از اجرای دستور `migrate`، میتوانید آنها را وارد پایگاهدادهی پروژهی خود کنید. به این منظور، دستور زیر را اجرا کنید. میتوانید از این دادهها به جهت تست کردن کوئریهای خود استفاده کنید.
**۱. ایجاد پایگاهداده**
```bash
python manage.py migrate
```
**۲. وارد کردن دادههای ازپیشآمادهشده *(fixture)***
```bash
python manage.py loaddata <mark title="آدرس فایل fixture">store/fixtures/store.json</mark>
```
درصورتیکه علاقمند به تست نیستید، نیازی به ایجاد پایگاهداده و وارد کردن دادههای آزمایشی نیست، و تنها کافیست که در فایل `queries.py` کوئریهای خود را بنویسید و از کوئرا جهت امتحان کردن درستی کوئریهایتان استفاده کنید.
## نکات مهم
+ شما تنها مجوز ایجاد تغییرات در فایل `queries.py` را دارید و **تمامی تغییرات دیگر شما** در فایلهای پروژه **نادیده گرفته خواهند شد.** توجه داشته باشید که تمامی بسترهای پروژه آماده شده و کافیست که شما تنها فایل `queries.py` را کامل کنید.
+ فراموش نکنید که میتوانید با مطالعهی فایلهای `models.py` با ساختار پایگاهداده، و با مطالعهی `test_sample.py` با روش تست کوئریها آشنا شوید.
## نحوهی ارسال
این سؤال از نوع سوالات تکفایل است؛ برای ارسال جواب، فایل پایتونی را که در آن موارد خواستهشده قرار دارد را انتخاب و سپس ارسال نمایید.
کوئریهای کوئراشاپ
در مدرسهی کوئرا، کلاسهایی وجود دارند که باید آنها را با استفاده از *APIهایی* که در آینده نوشته خواهند شد در سیستم ثبت کنیم. تکمیل سریالایزر مدل `Classroom` به فرهاد محول شده است. برای اطمینان از درستی کار فرهاد، به کمک شما برای تست سریالایزر فرهاد نیاز داریم.
شما باید **تست/تستهایی** بنویسید که درستی کد فرهاد را بررسی کند.
# پروژهی اولیه
پروژهی اولیه را از [این لینک](/contest/assignments/56249/download_problem_initial_project/190961/) دانلود کنید.
```
school
├── classes
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > temp_tests_file.py < </mark>
│ ├── 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
```
## ایجاد سریالایزر برای `Classroom`
فرهاد باید سریالایزری بر مبنای مدل `Classroom` به نام `ClassroomSerializer` ایجاد کند که ۲ محدودیت زیر حتماً در لایهی سریالایزر در نظر گرفته شوند.
* فیلد `capacity` نمیتواند مقدار کمتر از ۵ داشته باشد. (مقادیر صحیح: اعداد بزرگتر یا مساوی ۵)
* فیلد `area` نمیتواند مقدار منفی داشته باشد. (مقادیر صحیح: اعداد بزرگتر یا مساوی ۰)
## نکات مهم
* شما تنها مجوز ایجاد تغییرات در فایلهای ذکر شده (زرد رنگ) در درخت بالا را دارید و بقیهی تغییرات شما در فایلهای پروژه نادیده گرفته خواهند شد.
* توجه نمایید که باید تستهای خود را در فایل `temp_tests_file.py` در اپ `classes` بنویسید؛ نه در فایل `tests.py`.
* تستهای سیستم داوری برای تست کردن تستهاییست که شما نوشتهاید.
* محدودیتی در نام و تعداد تستها وجود ندارد.
* تستهای که مینویسید باید با سریالایزر درست *pass* و با سریالایزر غلط حداقل یکی از آنها *fail* شود.
* برای دریافت نمرهی این سوال، باید تمامی تستها را پاس کنید و هر تست به صورت جداگانه نمرهای نخواهد داشت.
## نحوهی ارسال
این سؤال از نوع سوالات تکفایل است؛ برای ارسال جواب، فایل پایتونی را که در آن موارد خواستهشده قرار دارد را انتخاب و سپس ارسال نمایید.
کلاسها
فرهاد که به اندازهی کافی با سلری و جنگو آشنا نیست برای انجام پروژه زیر به کمک شما نیاز دارد.
# پروژهی اولیه
پروژهی اولیه را از [این لینک](/contest/assignments/56249/download_problem_initial_project/190964/) دانلود کنید.
ساختار فایلهای این پروژه بهصورت زیر است:
```
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
│ ├── <mark class="yellow" title="اجازه تغییر این فایل را دارید"> > models.py < </mark>
│ ├── 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
│ └── <mark class="yellow" title="اجازه تغییر این فایل را دارید"> > views.py < </mark>
├── 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
```
## فایل `accounts/models.py`
مدل `User` در فایل `accounts/models.py` را بهنحوی تغییر دهید تا زمانی که اشتراک کاربر به اتمام رسید، ایمیلی به کاربر ارسال شود. از تسک ارسال ایمیل در فایل `accounts/tasks.py` استفاده کنید.
## فایل `blog/views.py`
ویوی `ArticleCreateView` در فایل `blog/views.py` را بهنحوی تغییر دهید که:
* فقط کاربران احرازهویتشده (کاربرانی که log-in کردهاند) به آن دسترسی داشته باشند.
* فیلد `author` فقط برای کاربران ادمین (*superuser*) وجود داشته باشد. برای کاربران عادی این فیلد نمایش داده نشود و مقدار آن برابر خود کاربر باشد.
* فیلد `status` فقط برای کاربران ادمین (*superuser*) وجود داشته باشد. برای کاربران عادی این فیلد نمایش داده نشود و مقدار آن برابر **d** باشد.
<details class="green">
<summary> تکمیلی </summary>
فیلدهای قابل ویرایش برای:
**کاربر ادمین:**`author`, `title`, `slug`, `body`, `status`, `category`, `is_premium`
**کاربر عادی:**`title`, `slug`, `body`, `category`, `is_premium`
</details>
* در تمپلیت `blog/article_create.html` رندر شود.
## نحوه ارسال
برای حل سوال یک فایل *ZIP* که شامل کلیه فایلهای موجود در پروژه است، ارسال کنید.