سلام!
به مسابقه لینوکس کدکاپ ۶ خوش آمدید.
با فرارسیدن مسابقات کدکاپ ، سلیب به همراه جمعی از دوستانش که منتظر برگزاری کدکاپ امسال بودند، به سرعت دست به کار شدند و تمرینات خود را شروع کردند تا بتوانند شانس خود را برای برنده شدن جوایز نفیس مسابقه افزایش دهند!
سلیب و علیرضا و عرشیا باهم تمرینات لینوکسی خود را شروع میکنند. سلیب اولین چالش را مطرح میکند. او میخواهد ابتدای دستگرمی را با چالشی ساده شروع کند. سلیب اسکریپتی میخواهد تا عبارتی را به عنوان ورودی دریافت کند و در خروجی به معکوس عبارت ورودی سلام کند!
به عبارتی شما باید اسکریپتی بنویسید که رشتهی str
را از ورودی دریافت کند و عبارت Hello revStr!
که در آن، revStr
برابر با معکوس رشتهی str
است را چاپ کند.
توجه کنید که:
for
و while
نمیباشید.برای فهم بیشتر، به مثال زیر دقت کنید.
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
باید خروجی زیر را دهد:
6puCedoC
، برابر CodeCup6
است؛ پس عبارت Hello CodeCup6!
چاپ میشود.برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
راهحل خود را درون فایل hello.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. اگر میخواهید درون سیستم خودتان از این تستها استفاده کنید، با ترمینال به دایرکتوری Hello_CodeCup
بروید و سپس دستورات زیر را اجرا کنید:
و یا از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
hello.sh
وارد نمایید.hello.sh
را آپلود کنید.به عنوان تمرین دوم، سلیب و علیرضا و عرشیا میخواهند یک مشکل از مشکلاتی که در ایران بسیار با آن مواجه میشوند را برای همیشه حل کنند.
آنها همواره در تلاش برای برقراری ارتباط با وبسایتی هستند که به خاطر حجم زیاد درخواستها توان پاسخگویی ندارد.
برای رفع این مشکل به صورت ابدی، سلیب یک سرور درون آدرسی بالا میآورد که یک ویژگی منحصر به فرد دارد. اگر به این سرور هرگونه ریکوئستی از نوع GET
بزنیم به طور کاملا تصادفی یکی از استاتوسکدهای زیر را برمیگرداند:
200
(HTTP_200_OK) را برگرداند که در این صورت اتصال ما با موفقیت انجام شده و هیچ مشکلی وجود ندارد.400
(HTTP_400_BAD_REQUEST) یا 403
(HTTP_403_FORBIDDEN) یا 404
(HTTP_404_NOT_FOUND) یا 500
(HTTP_500_INTERNAL_SERVER_ERROR) را برگرداند که در هر صورت اتصال ما با چالشهایی مواجه شده و نیاز داریم تا دوباره به آدرس مورد نظرمان ریکوئست بزنیم و منتظر برقراری ارتباطی صحیح با استاتوسکد 200
بمانیم.در این تمرین، علیرضا و عرشیا از شما میخواهند تا به کمک آنها بشتابید و اسکریپتی بنویسید تا با گرفتن آدرس سرور مورد نظر در ورودی، تا زمانی که به اولین استاتوسکد 200
برسد، به ریکوئست زدن ادامه دهد. توجه کنید پاسخ ارسالی شما باید به محض دریافت استاتوسکد 200
و چاپ خروجی خواسته شده به کار خود پایان دهد و هیچ ریکوئست دیگری به سرور ارسال نکند.
با ارسال هر ریکوئست از نوع GET
به سرور مورد نظر ما، پاسخی مطابق زیر دریافت میشود:
برای مثال اگر درخواست ما با استاتوسکد 404
مواجه شود، سرور پاسخ زیر را برای ما ارسال میکند:
اسکریپت ارسالی شما باید پاسخ هر ریکوئست را در قالب زیر در ترمینال چاپ کند:
برای مثال اگر سرور به ما پاسخی با استاتوسکد 404
داد، باید خروجی زیر نمایش داده شود:
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
باید خروجی زیر را دهد:
200
، دیگر ریکوئستی ارسال نمیشود و برنامه به کار خود خاتمه میدهد.برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
راهحل خود را درون فایل retry.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. برای این کار کافیست از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
retry.sh
وارد نمایید.retry.sh
را آپلود کنید.200
دریافت نکردهاید باید به ریکوئست زدن ادامه دهید.200
و چاپ خروجی خواسته شده به کار خود پایان دهد و هیچ ریکوئست دیگری به سرور ارسال نکند.سلیب و علیرضا و عرشیا اینبار برای تمرین خود به سراغ کاری جدید رفتند. آنها اینبار میخواهد جزئیات ساختن یوزر و گروه و دسترسی را درون لینوکس تمرین کنند. علیرضا سناریویی را مطرح میکند:
او از تیم میخواهد که درون سیستم، دو کاربر با نامهای user1
و user2
بسازند. همچنین گروه مشترکی با نام shared
بسازند و هر دو کاربر بالا را به آن اضافه کنند. هر یک از این کاربران باید مشخصات زیر را داشته باشند:
shared
هم باشند. یعنی گروه shared
باید به گروههای یوزر اضافه شود.پوشه خانه هر یوزر باید هم وجود داشته باشد و هم به او اختصاص داده شده باشد. همچنین شما مجاز به استفاده از دستورات ساخت دایرکتوری مانند mkdir
و غیره نیستید و باید از آپشن مخصوص به ساخت دایرکتوری خانه برای یوزر استفاده کنید.
از آنجایی که گروه shared
باید به لیست گروههای هر دو یوزر اضافه شود، شما نمیتوانید از آپشن -g
استفاده کنید!
سپس تیم باید دایرکتوریای با اسم shared_files
در روت (/
) بسازند. پس از ایجاد دایرکتوری، یک فایل با اسم shared_file
در این دایرکتوری بسازند. در نهایت نیز گروهی که صاحب این فایل و این دایرکتوری است را گروه shared
قرار دهند و کاربر صاحب فایل و دایرکتوری را user1
قرار دهند. همچنین تنها دسترسی خواندن و نوشتن را برای گروه و کاربر صاحب این فایل بدهند و به سایر کاربران هیچ دسترسیای ندهند. بعد از اتمام کار نیز کاربران و گروه و همه فایلهای آنان را پاک کنند!
از آنجایی که سلیب درون تیم نمیتواند در این تمرین به تنهایی شرکت کند از شما خواسته تا به او کمک کنید تا پیش از تمامی افراد تیم، این تمرین را تمام کند.
برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
راهحل خود را درون فایل solution.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. برای این کار کافیست از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
solution.sh
وارد نمایید.solution.sh
را آپلود کنید.سلیب در میان تمرینات تیمی خود برای آمادگی، از شلوغی برنامه روزانه خود و تعداد زیاد جلساتش خسته شده بود و داشت حسابی اذیت میشد. او اخیرا بسیاری از جلسات خود را فراموش میکرد. برای همین از تیم جدا شد و تصمیم گرفت به عنوان تمرین چهارم، با کمک شما ابزاری جهت تنظیم آسانتر جلسات خود بنویسد. او میخواهد ابزاری داشته باشد که با تعامل با آن بتواند اطلاعاتی از روز خود دریافت کند و یا جلسهای به روز خود اضافه کند. ابزار او باید پشتیبانی از ۵ حالت زیر را داشته باشد:
برای این کار از دستور زیر استفاده میکنیم:
پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:
برای مثال دستور زیر به معنای افزودن یک جلسه از ساعت ۱۰ صبح تا ساعت ۳ یا همان ۱۵ بعدازظهر است. توجه داشته باشید که ساعت راس ساعت ۱۵ جلسه تمام میشود و سلیب میتواند بدون تداخل، جلسهای دیگر را از ساعت ۱۵ شروع کند.
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
فرض کنید میخواهیم بدانیم که آیا مثلا سلیب میتواند از ساعت ۵ تا ۱۰ جلسهای داشته باشد یا خیر. برای این کار از دستور زیر استفاده میکنیم:
در این حالت، برنامه شما با دو حالت مواجه میشود:
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
فرض کنید جلسهای کنسل شده و یا کار فوری پیش آمده و ما میخواهیم از ساعت ۵ تا ۱۰ روز سلیب را آزاد کنیم. برای این کار از دستور زیر استفاده میکنیم:
پس از افزوده شدن جلسه مورد نظر، برنامه شما باید مقدار زیر را خروجی دهد:
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
اگر دستوری به جز سه دستور بیانشده به برنامه شما ورودی داده شود، باید خروجی زیر را نمایش دهید:
برای مثال فرض کنید به ترتیب، دستورات زیر را به برنامه شما ورودی بدهیم:
پس از افزوده شدن جلسه بالا، برنامه شما باید مقدار زیر را خروجی دهد:
برای خروج از برنامه از دستور زیر استفاده میکنیم:
در این صورت باید پیش از بسته شدن برنامه، خروجی زیر را چاپ کنید:
و سپس برنامه را ببندید.
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
باید خروجی زیر را دهد:
برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
راهحل خود را درون فایل checker.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. اگر میخواهید درون سیستم خودتان از این تستها استفاده کنید، با ترمینال به دایرکتوری Busy_SAliB
بروید و سپس دستورات زیر را اجرا کنید:
و یا از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
checker.sh
وارد نمایید.checker.sh
را آپلود کنید.