*سلیب* در میان تمرینات تیمی خود برای آمادگی، از شلوغی برنامه روزانه خود و تعداد زیاد جلساتش خسته شده بود و داشت حسابی اذیت میشد. او اخیرا بسیاری از جلسات خود را فراموش میکرد. برای همین از تیم جدا شد و تصمیم گرفت به عنوان تمرین چهارم، با کمک شما ابزاری جهت تنظیم آسانتر جلسات خود بنویسد. او میخواهد ابزاری داشته باشد که با تعامل با آن بتواند اطلاعاتی از روز خود دریافت کند و یا جلسهای به روز خود اضافه کند. ابزار او باید پشتیبانی از ۵ حالت زیر را داشته باشد:
## اضافه کردن جلسه
برای این کار از دستور زیر استفاده میکنیم:
```
add <mark class="red" title="ساعت شروع جلسه"><START></mark> <mark class="red" title="ساعت پایان جلسه"><END></mark>
```
پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:
```
A meeting from <mark class="red" title="ساعت شروع جلسه"><START></mark> to <mark class="red" title="ساعت پایان جلسه"><END></mark> added to your day!
```
برای مثال دستور زیر به معنای افزودن یک جلسه از ساعت ۱۰ صبح تا ساعت ۳ یا همان ۱۵ بعدازظهر است. **توجه داشته باشید که ساعت راس ساعت ۱۵ جلسه تمام میشود و سلیب میتواند بدون تداخل، جلسهای دیگر را از ساعت ۱۵ شروع کند.**
```
add 10 15
```
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
```
A meeting from 10 to 15 added to your day!
```
+ **تضمین میشود که ساعت شروع و پایان جلسات، اعدادی بین ۰ تا ۲۴ هستند. همچنین تضمین میشود که ساعت پایان یک جلسه، حداقل یک ساعت پس از شروع جلسه میباشد. تضمین آخر نیز این است که هیچگاه تداخلی بین جلسات پیش نمیآید و در هر زمان فقط یک جلسه خواهیم داشت.**
## چک کردن ساعات روز
فرض کنید میخواهیم بدانیم که آیا مثلا *سلیب* میتواند از ساعت ۵ تا ۱۰ جلسهای داشته باشد یا خیر. برای این کار از دستور زیر استفاده میکنیم:
```
check <mark class="red" title="ساعت شروع"><START></mark> <mark class="red" title="ساعت پایان"><END></mark>
```
در این حالت، برنامه شما با دو حالت مواجه میشود:
1. بازه زمانی مورد نظر به طور کامل خالی باشد که در این صورت برنامه شما باید در قالب زیر به *سلیب* بگوید که میتواند درون بازه مورد نظر جلسهای داشته باشد:
```
You can add a meeting from <mark class="red" title="ساعت شروع"><START></mark> to <mark class="red" title="ساعت پایان"><END></mark>!
```
2. تمام بازه و یا بخشی از بازه زمانی مورد نظر پر باشد که در این صورت برنامه شما باید در قالب زیر به *سلیب* بگوید که **نمیتواند** درون بازه مورد نظر جلسهای داشته باشد:
```
You can't have a meeting from <mark class="red" title="ساعت شروع"><START></mark> to <mark class="red" title="ساعت پایان"><END></mark>!
```
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
```
check 10 15
add 10 15
check 9 12
check 15 17
```
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
```
You can add a meeting from 10 to 15!
A meeting from 10 to 15 added to your day!
You can't have a meeting from 9 to 12!
You can add a meeting from 15 to 17!
```
## آزاد کردن ساعات روز
فرض کنید جلسهای کنسل شده و یا کار فوری پیش آمده و ما میخواهیم از ساعت ۵ تا ۱۰ روز *سلیب* را آزاد کنیم. برای این کار از دستور زیر استفاده میکنیم:
```
free <mark class="red" title="ساعت شروع"><START></mark> <mark class="red" title="ساعت پایان"><END></mark>
```
پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:
```
You're now free from <mark class="red" title="ساعت شروع جلسه"><START></mark> to <mark class="red" title="ساعت پایان جلسه"><END></mark>!
```
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
```
check 10 15
add 10 15
check 9 12
free 9 12
check 9 12
check 12 14
```
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
```
You can add a meeting from 10 to 15!
A meeting from 10 to 15 added to your day!
You can't have a meeting from 9 to 12!
You're now free from 9 to 12!
You can add a meeting from 9 to 12!
You can't have a meeting from 12 to 14!
```
+ **دقت کنید که پس از آزاد کردن زمان از ساعت ۹ تا ساعت ۱۲، جلسهی اول که از ساعت ۱۰ تا ساعت ۱۵ ایجاد شده بود بهطور کلی کنسل نمیشود و فقط زمان ۱۰ تا ۱۲ آن کنسل میشود؛ اما از ۱۲ تا ۱۵، جلسه برقرار است.**
## دستور اشتباه
اگر دستوری به جز سه دستور بیانشده به برنامه شما ورودی داده شود، باید خروجی زیر را نمایش دهید:
```
Command not found.
```
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
```
add 1 6
hello
check 3 5
sokdfsjdsfshfc
check 6 7
```
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
```
You can add a meeting from 1 to 6!
Command not found.
You can't have a meeting from 3 to 5!
Command not found.
You can add a meeting from 6 to 7!
```
## خروج از برنامه
برای خروج از برنامه از دستور زیر استفاده میکنیم:
```
exit
```
در این صورت باید پیش از بسته شدن برنامه، خروجی زیر را چاپ کنید:
```
Bye Bye!
```
و سپس برنامه را ببندید.
## مثال
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
```
./checker.sh
add 1 6
check 3 5
free 5 7
check 5 7
add 5 7
check 20 24
SAliB
exit
```
باید خروجی زیر را دهد:
```
A meeting from 1 to 6 added to your day!
You can't have a meeting from 3 to 5!
You're now free from 5 to 7!
You can add a meeting from 5 to 7!
A meeting from 5 to 7 added to your day!
You can add a meeting from 20 to 24!
Command not found.
Bye Bye!
```
## پروژه اولیه
برای دریافت پروژه اولیه [این لینک](/problemset/assignments/4367/download_problem_initial_project/129783/) را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
```
Busy_SAliB
├── checker.sh
└── test
└── test_sample.py
```
راهحل خود را درون فایل `checker.sh` پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. اگر میخواهید درون سیستم خودتان از این تستها استفاده کنید، با ترمینال به دایرکتوری `Busy_SAliB` بروید و سپس دستورات زیر را اجرا کنید:
```bash
chmod +x checker.sh
python3 -m unittest
```
و یا از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
## توجه کنید
+ فراموش نکنید که اسکریپتی کامل را در پاسختان تحویل دهید.
+ فراموش نکنید که اسکریپت خود را درون فایلی با نام `checker.sh` وارد نمایید.
+ برای ارسال پاسخ خود کافیست فایل `checker.sh` را آپلود کنید.
+ راس ساعت پایان، جلسه تمام میشود و *سلیب* میتواند بدون تداخل، جلسهای دیگر را از ساعت آن ساعت شروع کند.
+ تضمین میشود که ساعت شروع و پایان جلسات، اعدادی بین ۰ تا ۲۴ هستند. همچنین تضمین میشود که ساعت پایان یک جلسه، حداقل یک ساعت پس از شروع جلسه میباشد. تضمین آخر نیز این است که هیچگاه تداخلی بین جلسات پیش نمیآید و در هر زمان فقط یک جلسه خواهیم داشت.