سلیب پر مشغله!


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

اضافه کردن جلسه🔗

برای این کار از دستور زیر استفاده می‌کنیم:

add <START> <END>
Plain text

پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:

A meeting from <START> to <END> added to your day!
Plain text

برای مثال دستور زیر به معنای افزودن یک جلسه از ساعت ۱۰ صبح تا ساعت ۳ یا همان ۱۵ بعدازظهر است. توجه داشته باشید که ساعت راس ساعت ۱۵ جلسه تمام می‌شود و سلیب می‌تواند بدون تداخل، جلسه‌ای دیگر را از ساعت ۱۵ شروع کند.

add 10 15
Plain text

پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:

A meeting from 10 to 15 added to your day!
Plain text
  • تضمین می‌شود که ساعت شروع و پایان جلسات، اعدادی بین ۰ تا ۲۴ هستند. هم‌چنین تضمین می‌شود که ساعت پایان یک جلسه، حداقل یک ساعت پس از شروع جلسه می‌باشد. تضمین آخر نیز این است که هیچ‌گاه تداخلی بین جلسات پیش نمی‌آید و در هر زمان فقط یک جلسه‌ خواهیم داشت.

چک کردن ساعات روز🔗

فرض کنید می‌خواهیم بدانیم که آیا مثلا سلیب می‌تواند از ساعت ۵ تا ۱۰ جلسه‌ای داشته باشد یا خیر. برای این کار از دستور زیر استفاده می‌کنیم:

check <START> <END>
Plain text

در این حالت، برنامه شما با دو حالت مواجه می‌شود:

  1. بازه زمانی مورد نظر به طور کامل خالی باشد که در این صورت برنامه شما باید در قالب زیر به سلیب بگوید که می‌تواند درون بازه مورد نظر جلسه‌ای داشته باشد:
You can add a meeting from <START> to <END>!
Plain text
  1. تمام بازه و یا بخشی از بازه زمانی مورد نظر پر باشد که در این صورت برنامه شما باید در قالب زیر به سلیب بگوید که نمی‌تواند درون بازه مورد نظر جلسه‌ای داشته باشد:
You can't have a meeting from <START> to <END>!
Plain text

برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:

check 10 15
add 10 15
check 9 12
check 15 17
Plain text

پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:

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!
Plain text

آزاد کردن ساعات روز🔗

فرض کنید جلسه‌ای کنسل شده و یا کار فوری پیش آمده و ما می‌خواهیم از ساعت ۵ تا ۱۰ روز سلیب را آزاد کنیم. برای این کار از دستور زیر استفاده می‌کنیم:

free <START> <END>
Plain text

پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:

You're now free from <START> to <END>!
Plain text

برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:

check 10 15
add 10 15
check 9 12
free 9 12
check 9 12
check 12 14
Plain text

پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:

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!
Plain text
  • دقت کنید که پس از آزاد کردن زمان از ساعت ۹ تا ساعت ۱۲، جلسه‌ی اول که از ساعت ۱۰ تا ساعت ۱۵ ایجاد شده بود به‌طور کلی کنسل نمی‌شود و فقط زمان ۱۰ تا ۱۲ آن کنسل می‌شود؛ اما از ۱۲ تا ۱۵، جلسه برقرار است.

دستور اشتباه🔗

اگر دستوری به جز سه دستور بیان‌شده به برنامه شما ورودی داده شود، باید خروجی زیر را نمایش دهید:

Command not found.
Plain text

برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:

add 1 6
hello
check 3 5
sokdfsjdsfshfc
check 6 7
Plain text

پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:

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!
Plain text

خروج از برنامه🔗

برای خروج از برنامه از دستور زیر استفاده می‌کنیم:

exit
Plain text

در این صورت باید پیش از بسته شدن برنامه، خروجی زیر را چاپ کنید:

Bye Bye!
Plain text

و سپس برنامه را ببندید.

مثال🔗

برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:

./checker.sh
add 1 6
check 3 5
free 5 7
check 5 7
add 5 7
check 20 24
SAliB
exit
Plain text

باید خروجی زیر را دهد:

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!
Plain text

پروژه اولیه🔗

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

Busy_SAliB
├── checker.sh
└── test
    └── test_sample.py
Plain text

راه‌حل خود را درون فایل checker.sh پیاده‌سازی کنید. برای اطمینان نسبی از پاسخ‌تان می‌توانید از تست‌های نمونه مسئله استفاده کنید. اگر می‌خواهید درون سیستم خودتان از این تست‌ها استفاده کنید، با ترمینال به دایرکتوری Busy_SAliB بروید و سپس دستورات زیر را اجرا کنید:

chmod +x checker.sh
python3 -m unittest
Bash

و یا از طریق دکمه «اجرای تست نمونه» پاسخ‌تان را برای کوئرا ارسال کنید.

توجه کنید🔗

  • فراموش نکنید که اسکریپتی کامل را در پاسخ‌تان تحویل دهید.
  • فراموش نکنید که اسکریپت خود را درون فایلی با نام checker.sh وارد نمایید.
  • برای ارسال پاسخ خود کافی‌ست فایل checker.sh را آپلود کنید.
  • راس ساعت پایان، جلسه تمام می‌شود و سلیب می‌تواند بدون تداخل، جلسه‌ای دیگر را از ساعت آن ساعت شروع کند.
  • تضمین می‌شود که ساعت شروع و پایان جلسات، اعدادی بین ۰ تا ۲۴ هستند. هم‌چنین تضمین می‌شود که ساعت پایان یک جلسه، حداقل یک ساعت پس از شروع جلسه می‌باشد. تضمین آخر نیز این است که هیچ‌گاه تداخلی بین جلسات پیش نمی‌آید و در هر زمان فقط یک جلسه‌ خواهیم داشت.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.