سلام دوست عزیز😃👋
به «مسابقه ورودی بوتکمپ کداستار - Software Engineering» خوش آمدی!
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل ChatGPT
و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
لینکهای مفید برای شرکت در مسابقه:
سوالات و مشکلات خودتان را میتوانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.
موفق باشید و بهتون خوش بگذره 😉✌
در این سوال شما باید یک تقویم شبیه به Google Calendar طراحی و پیادهسازی کنید که فقط با استفاده از دستورات متنی (command line) با آن تعامل میشود. این تقویم قادر است رویدادهای روزانه را مدیریت کرده، برخوردهای (conflicts) رویدادها را تشخیص داده و امکان جستوجو، ویرایش و گزارشگیری از رویدادها را فراهم کند.
اضافه کردن، حذف و ویرایش رویدادها
نمایش برنامه روزانه/هفتگی/ماهانه
تشخیص برخورد زمانی بین رویدادها
جستوجوی رویدادها با کلمات کلیدی
ورودیها به شکل دستورات متنی داده میشوند. هر خط یک دستور مجزا است.
ADD
: افزودن یک رویداد با تاریخ، ساعت شروع، ساعت پایان و عنوان.
REMOVE
: حذف رویدادی که از ساعت مشخص در یک روز آغاز میشود.
EDIT
: تغییر عنوان رویداد مشخص شده.
LIST
: فهرست رویدادهای یک روز خاص به ترتیب زمان.
WEEK
: فهرست رویدادهای ۷ روز از تاریخ دادهشده.
MONTH
: فهرست رویدادهای یک ماه خاص.
SEARCH
: جستوجوی رویدادهایی که عنوانشان شامل کلیدواژه است.
CONFLICTS
: نمایش تمام رویدادهایی که در تاریخ مشخص با یکدیگر همپوشانی دارند.
این دستور یک رویداد جدید را با مشخصات زیر به تقویم اضافه میکند:
<date>
: تاریخ رویداد به فرمت yyyy-mm-dd
<start_time>
: زمان شروع رویداد به فرمت hh:mm
(۲۴ ساعته)
<end_time>
: زمان پایان رویداد به فرمت hh:mm
(۲۴ ساعته)
<title>
: عنوان رویداد (حداکثر ۱۰۰ کاراکتر)
قوانین و شرایط:
این دستور رویدادی را که دقیقاً در تاریخ و ساعت مشخصشده شروع میشود، از تقویم حذف میکند.
<date>
: تاریخ رویداد به فرمت yyyy-mm-dd
<start_time>
: زمان شروع رویداد به فرمت hh:mm
قوانین و شرایط:
فقط اگر رویدادی دقیقا با این تاریخ و ساعت شروع وجود داشته باشد، حذف انجام میشود.
در صورت موفقیت:
این دستور عنوان رویدادی را که در تاریخ و ساعت مشخصشده شروع میشود، به مقدار جدید تغییر میدهد.
<date>
: تاریخ رویداد به فرمت yyyy-mm-dd
<start_time>
: زمان شروع رویداد به فرمت hh:mm
<new_title>
: عنوان جدید (حداکثر ۱۰۰ کاراکتر)
قوانین و شرایط:
فقط عنوان قابل تغییر است، زمان شروع یا پایان قابل تغییر نیست.
اگر رویداد یافت شود، ویرایش انجام میشود و خروجی زیر چاپ میشود:
این دستور فهرست تمام رویدادهای ثبتشده در یک روز خاص را به ترتیب زمان شروع (رویدادهایی که زمان شروع زودتری دارند، بالاتر چاپ شوند)، نمایش میدهد.
<date>
: تاریخ مورد نظر به فرمت yyyy-mm-dd
فرمت خروجی:
این دستور فهرست تمام رویدادهای ۷ روز از تاریخ مشخصشده (شامل آن روز) را نمایش میدهد. مثلا اگر تاریخ ۷ نوامبر وارد شود، رویدادهای ۷ نوامبر تا ۱۳ نوامبر نمایش داده شوند.
<date>
: تاریخ شروع بازه به فرمت yyyy-mm-dd
فرمت خروجی:
این دستور فهرست تمام رویدادهای ثبتشده در یک ماه مشخص را به ترتیب تاریخ و زمان نمایش میدهد.
<year-month>
: ماه مورد نظر به فرمت yyyy-mm
فرمت خروجی:
این دستور رویدادهایی را نمایش میدهد که عنوان آنها شامل کلیدواژه دادهشده است و حساس به بزرگی و کوچکی حروف نیست. خروجی ابتدا به ترتیب تاریخ، سپس بر اساس زمان شروع در هر روز مرتب شود.
<keyword>
: کلیدواژه مورد نظر برای جستوجوفرمت خروجی:
این دستور تمام رویدادهایی که در تاریخ مشخص با یکدیگر همپوشانی زمانی دارند را نمایش میدهد.
<date>
: تاریخ مورد نظر به فرمت yyyy-mm-dd
قوانین:
فرمت خروجی:
ورودیها از طریق فلگهای مشخص شده وارد میشوند و ترتیب آنها آزاد است و لزوماً به ترتیب ذکر شده در متن وارد نمیشوند.
در صورتی که هر یک از بخشهای مسئله را به درستی پیادهسازی کردید، امتیاز آن را مستقل از سایر بخشها خواهید گرفت. (البته دقت کنید در صورتی که دستور ADD
شما به درستی کار نکند، امتیاز سایر بخشهای برنامه را نخواهید گرفت.)
برای گرفتن امتیاز کامل، به کوچکی یا بزرگی حروف در خروجی دقت کنید.
تضمین میشود ساختار دستورات و فرمت تاریخها به درستی وارد خواهد شد. زمانها در قالب ۲۴ ساعته hh:mm
و تاریخها در قالب yyyy-mm-dd
یا yyyy-mm
هستند.
تعداد رویدادها حداکثر ۱۰,۰۰۰ عدد است.
عنوان رویداد حداکثر ۱۰۰ کاراکتر دارد.
خروجی رویدادها همیشه بر اساس زمان شروع به صورت صعودی مرتب باشد (ابتدا به ترتیب تاریخ، سپس بر اساس زمان شروع در هر روز مرتب شود). رویدادهای ورودی لزوماً به ترتیب زمانی صعودی وارد نمیشوند.
رعایت اصول و قوانین کد تمیز و شیگرایی حائز اهمیت میباشد.
سطر اول ورودی شامل یک عدد صحیح و مثبت است که تعداد دستورهای ورودی را نشان میدهد. در سطر بعدی ورودی، هر سطر شامل یکی از دستورهای ذکر شده است.
خروجیهای خواسته شده برای هر دستور را به ترتیب چاپ کنید.
دو رویداد اول (09:00–10:00 و 09:30–11:00) بازهی زمانی مشترک دارند.
جستجوی واژهی «call» فقط یک مورد پیدا میکند.
حذف انجام میشود، چون تاریخ و ساعت شروع دقیقاً مشخص شده.
خروجی LIST
فقط رویدادهای باقیمانده را نشون میدهد.
سه رویداد اضافه شدند که تداخلی با هم ندارند.
دستور EDIT
عنوان رویداد دوم را تغییر میدهد.
با دستور WEEK
همه رویدادها بین تاریخ 2025-07-01
تا تاریخ 2025-07-07
به ترتیب زمان نمایش داده میشوند.
با دستور MONTH
همه رویدادها مرتب به ترتیب زمان شروع نمایش داده میشوند.