جو شرکت رهنما خیلی صمیمی است؛ بدین منظور در این شرکت همه، از پیر تا جوان، همدیگر را به اسم کوچک صدا میزنند.
در پی استخدامات بیرویه واحد منابع انسانی، به تازگی رهنما با مشکلی اساسی تشابه اسمی مواجه شدهاست.
متاسفانه وقتی کسی در شرکت صدا میزند «باقر» از آنجایی که تعداد زیادی «باقر» در شرکت مشغول کار هستند، نمیتوان فهمید که منظورش کدام «باقر» است.
بدین منظور مدیر منابع انسانی تصمیم میگیرد که برای هر شخص دقیقا یک کلاهرنگی بخرد به طوری که همه کسانی که اسم کوچک مشابهی دارند کلاهی با رنگ متفاوت داشته باشند.
با اینکار تا حدودی مشکل حل میشود؛ بدین صورت که از این به بعد کارکنان شرکت به جای اینکه اسمکوچک شخص را صدا بزنند، از ترکیب «اسم کوچک + رنگ» استفاده میکنند. مثلا وقتی میگوییم «باقر صورتی» میدانیم تنها یک «باقر صورتی» داریم و دیگر ابهامی وجود ندارد.
حال مدیر منابع انسانی رهنما از شما خواسته تا با گرفتن نام افراد، حداقل تعداد رنگهای مختلف لازم را بدست آورید تا به هر فرد بتوان ترکیب «اسم کوچک + رنگ» یکتایی را متناظر کرد.
برای فهم بهتر به نمونهها و توضیحشان دقت کنید.
در خط اول که تعداد کارکنان شرکت رهنما است به شما داده میشود.
در خط بعدی در هر خط دو رشته متشکل از حروف کوچک الفبای انگلیسی که طول هر یک حداکثر ۱۵ حرف است به شما داده میشود که با فاصله از هم جدا شده و به ترتیب، نام و نام خانوادگی کارمند ام را نشان میدهند.
تضمین میشود که هیچ دو نفری در رهنما وجود ندارند که نام و نام خانوادگیشان دقیقا یکی باشد.
در تنها خط خروجی حداقل تعداد رنگهای مختلف لازم را چاپ کنید.
توضیح نمونه ۱: با دو رنگ مختلف میتوان مشکل تشابه اسمی را حل کرد به اینصورت که به دو باقر و دو نادر کلاه ناهمرنگ بدهیم.
جدولی به این صورت ساخته شدهاست که ابتدا عدد ۱ را در مرکز جدول مینویسیم، سپس عدد ۲ را در خانهی سمت راست عدد ۱ مینویسیم و باقی اعداد را با شروع از عدد ۳ در جهت عکس عقربههای ساعت و به صورت مارپیج و کنار هم در جدول مینویسیم.
شما باید به ازای هر یک از تا درخواستی که یک زیر مستطیل از این جدول را نمایش میدهند، باقیماندهی مجموع اعداد داخل این زیر مستطیل را بر در خروجی چاپ کنید.
به عنوان مثال در جدول زیر عدد برابر ۲ و مجموع اعداد داخل زیرمستطیل طوسی رنگ برابر ۷۴ است.
در خط اول ورودی ۲ عدد و آمده است که به ترتیب اندازهی جدول و تعداد درخواستها را مشخص میکنند.
در خط بعدی در هر خط به ترتیب ۴ عدد و و و آمده است که مختصات ۲ خانه از جدول را نشان میدهند و این ۲ خانهي مشخص شده، ۲ خانه از ۲ گوشهی روبهروی هم زیر مستطیلی است که شما باید مجموع اعداد داخل آن را حساب کنید.
در خط ام خروجی باقیماندهی مجموع اعداد داخل زیرمستطیل مشخص شده در درخواست ام را بر چاپ کنید.
به محدودیت عدد در این سوال دقت کنید.
جدولی به این صورت ساخته شدهاست که ابتدا عدد ۱ را در مرکز جدول مینویسیم، سپس عدد ۲ را در خانهی سمت راست عدد ۱ مینویسیم و باقی اعداد را با شروع از عدد ۳ در جهت عکس عقربههای ساعت و به صورت مارپیج و کنار هم در جدول مینویسیم.
شما باید به ازای هر یک از تا درخواستی که یک زیر مستطیل از این جدول را نمایش میدهند، باقیماندهی مجموع اعداد داخل این زیر مستطیل را بر در خروجی چاپ کنید.
به عنوان مثال در جدول زیر عدد برابر ۲ و مجموع اعداد داخل زیرمستطیل طوسی رنگ برابر ۷۴ است.
در خط اول ورودی ۲ عدد و آمده است که به ترتیب اندازهی جدول و تعداد درخواستها را مشخص میکنند.
در خط بعدی در هر خط به ترتیب ۴ عدد و و و آمده است که مختصات ۲ خانه از جدول را نشان میدهند و این ۲ خانهي مشخص شده، ۲ خانه از ۲ گوشهی روبهروی هم زیر مستطیلی است که شما باید مجموع اعداد داخل آن را حساب کنید.
در خط ام خروجی باقیماندهی مجموع اعداد داخل زیرمستطیل مشخص شده در درخواست ام را بر چاپ کنید.
هر کسی در شرکت رهنما گلدان مخصوص خودش را دارد.
اگر کارمندی در شرکت رهنما هوس کند گیاهی را روی میز کارش بگذارد، زحمت ساخت گلدان آن گیاه را پرینتر سهبعدی موجود در طبقهی دوم شرکت میکشد.
به این صورت که ابتدا مختصات یک مستطیل موازی با محورهای مختصات به همراه یک عدد را به پرینتر میدهیم و پرینتر برای ما گلدانی میسازد که حاصل از دوران درجهی این مستطیل حول محور ها (محور ) است.
کارمندان از ابتدای خرید این پرینتر توسط شرکت خیلی از این دستگاه استقبال کردند، اما همهی کارمندان بعد از ساخت گلدانشان یک سوال به ذهنشان میآمد و آن هم این بود که چه مقدار خاک باید بخرم که برای این گلدان کافی باشد.
به راستی که اگر پرینتر بعد از ساخت گلدان، حجم گلدان را هم به ما نمایش میداد دیگر حرفی برای گفتن باقی نمیگذاشت.
کارمندان شرکت که به این مشکل برخوردند، تصمیم گرفتند که خودشان برنامه ای بنویسند تا اینکار را انجام دهد.
حال از شما به عنوان کارمند آیندهی شرکت میخواهیم که این کد را برای ما بازنویسی کنید.
در خط اول ورودی ۴ عدد صحیح و و و آمدهاست که ۲ نقطه روبهروی مستطیل را نشان میدهند.
در خط بعدی ورودی عدد طبیعی آمده است.
در تنها خط خروجی حجم شکل حاصل از درجه دوران مستطیل داده شده، حول محور را چاپ کنید.
دقت کنید که جواب شما در صورتی قابل قبول خواهد بود که اختلافش با جواب اصلی کمتر از باشد.
همانطور که میدانید برنامهنویسی و کار کردن گروهی روی پروژهها نیازمند مقادیری نظم و هماهنگی است.
یکی از راههای مفید برای ایجاد نظم و هماهنگی در کارهای متنی و برنامهنویسی استفاده از ابزار git
است.
در این سوال ما یک نسخهی شخصیسازی شده از git
داریم و میخواهیم برای آن تعدادی دستور دیگر اضافه کنیم.
این نسخه از git
شخصیسازی شده تنها میتواند تغییرات را روی یک فایل خاص که در ابتدا خالی است، اعمال و ذخیرهسازی کند.
در ادامه دستوراتی که در این نسخه نیاز به پیادهسازی دارند شرح داده شده است:
git add string
: این دستور به این معناست که رشتهی string
را به انتهای فایل فعلی اضافه کن.git clear
: این دستور به این معناست که فایل فعلی را خالی کن.git del
: این دستور به این معناست که خط انتهایی فایل فعلی را در صورت وجود حذف کن.git commit & push
: این دستور تغییراتی که در فایل ایجاد شده را، روی سرور و فایل اصلی اعمال میکند.git checkout
: با اجرای این دستور باید محتوای فایل فعلی و اصلی را برابر محتوای فایل بعد از اجرای یکی مانده به آخرین دستور از نوع git commit & push
قرار دهید.git pull
: با اجرای این دستور باید آخرین محتوایی که روی سرور و فایل اصلی است را چاپ کنید. وظیفهی اضافه کردن این دستورات با شماست.
برای آشنایی بیشتر با قابلیتهای git
میتوانید به این لینک مراجعه کنید.
در خ اول ورودی عدد آمدهاست، که تعداد دستورات را نشان میدهد.
در خط بعدی در هر خط یکی از دستورات بالا آمده است.
تضمین میشود که قبل از هر دستور git checkout
حداقل ۲ دستور از نوع git commit & push
آمده باشد.
طول هر رشته ورودی حداکثر ۳۰ میباشد.
در خروجی به ازای هر یک از دستورهای از نوع git pull
ابتدا تعداد خطوط محتوای داخل فایل را چاپ کنید و در ادامهی خروجی به ترتیب در هر خط یکی از خطوط محتوای فایل را چاپ کنید.
شرکت رهنما میخواهد فرش بزرگی در طبقهی اختصاصی رهنما کالج بیاندازد.
از آنجا که کارمندان رهنما از طرح فرشهای موجود در بازار خوششان نیامده بود تصمیم گرفتند که طرح و اندارهی فرش را خودشان و متناسب با فضای رهنما کالج انتخاب کنند.
پس از بررسی های لازم توسط گرافیستهای شرکت، فرشی مربعی شکل، به ضلع متر و به طرحی که در ادامه گفته خواهد شد، انتخاب شد.
طرح فرش به این صورت است که ابتدا یک مربع به عنوان کادر فرش رسم میشود (طول ضلع این مربع با طول ضلع فرش برابر است)، سپس مرحله حرکت زیر را انجام میدهیم تا مربع دیگر رسم شوند.
در انتها شکل به دست آمده را به قالی بافی میدهیم تا فرش مورد نظر را برایمان ببافند.
اما کشیدن طرح این فرش اینقدرها هم کار آسانی نیست، مخصوصا اگر قرار بر این باشد که برنامهای بنویسید تا این کار را انجام دهد.
شکل زیر روش رسم مرحله به مرحلهی فرش را به ازای نمایش میدهد.
برای فهم بهتر سوال به مثالها توجه کنید.
در تنها خط ورودی عدد آمده است.
در خروجی به ازای عدد طرح فرش رهنما کالج را چاپ کنید.
دقت کنید که اضلاع مربعها را باید با کاراکتر #
نشان دهید و باقی خانههای خالی روی فرش را با کاراکتر .
.
همانطور که میدانید در لینوکس با استفاده از دستور md5sum
، میتوان هش MD5 محتوای یک فایل را به دست آورد. میتوان از این مقدار برای بررسی مساوی بودن محتوای دو فایل استفاده کرد، به این صورت که اگر مقدار هش دو فایل برابر باشد به احتمال بسیار زیاد محتوای آن فایلها با هم کاملاً یکسان است.
اکنون ما میخواهیم دو پوشه را با هم مقایسه کنیم و ببینیم که آیا محتوای این دو پوشه کاملاً یکسان است یا خیر. از نظر ما دو پوشه یکسان هستند اگر اولاً ساختار داخلی دو پوشه (پوشهبندیها و مسیر فایلها) دقیقاً یکسان باشد و محتوای فایلهای متناظر کاملاً یکسان باشد. یعنی هر دو فایل متناظر، آدرس نسبی یکسانی داشته باشند (نسبت به پوشه خود، در مسیر یکسانی قرار گرفته باشند) و محتوای یکسانی نیز داشته باشند. (اطلاعاتی مانند owner, permission, time فایلها را در نظر نمیگیریم).
بنابراین در مثال زیر، با فرض یکسان بودن محتوای فایلهای با نام یکسان، دو پوشه dir1
و dir2
یکسان نیستند چون ساختار داخلی متفاوتی دارند. اما dir1
و dir3
با این که نامهای متفاوتی دارند، یکسان هستند (زیرا محتوای یکسانی دارند).
برای این مقایسه میخواهیم با استفاده از md5sum
یک هش برای هر پوشه به دست بیاوریم و برای مقایسه پوشهها، هش پوشهها را با هم مقایسه کنیم.
یک اسکریپت Bash با نام md5sum4dir.sh
بنویسید که آدرس یک پوشه را بگیرد و در خروجی، هش آن پوشه را بنویسد. هش تولیدشده باید مانند خروجی md5sum
یک رشته hex به طول ۳۲ باشد.
اسکریپت md5sum4dir.sh
را Zip کنید و به عنوان پاسخ ارسال کنید. دقت کنید که اسکریپت باید مستقیماً در ریشه فایل Zip باشد (در هیچ پوشهای نباشد).
فرض کنید برنامهای در یک سرور لینوکس log های خود را در یک فایل به نام app.log
مینویسد. برای این که حجم این فایل خیلی زیاد نشود، میخواهیم یک اسکریپت Bash برای rotate کردن فایلهای لاگ به نام rotate.sh
بنویسیم (تا log های هر روز در یک فایل جداگانه ذخیره شود) و سرور را طوری تنظیم کنیم که این اسکریپت هر نیمهشب یک بار اجرا شود.
یک وضعیت از فایلهای پوشه log ها را در زیر میبینید. در انتهای فایلهای rotate شده، یک عدد قرار میگیرد و هرچه این عدد بزرگتر باشد، فایل قدیمیتر است. app.log
لاگهای امروز را نشان میدهد، app.log.1
لاگهای دیروز را در خود دارد و به همین ترتیب.
در صورت اجرای اسکریپت rotate.sh
وضعیت پوشه باید به این صورت تغییر کند:
فایل app.log.2
به app.log.3
تغییر نام داده، فایل app.log.1
به app.log.2
تغییر نام داده، فایل app.log
به app.log.1
تغییر نام داده و یک فایل خالی به نام app.log
ایجاد شده تا لاگهای جدید در آن نوشته شود.
اسکریپت rotate.sh
را بنویسید که آدرس پوشهای که app.log
در آن قرار دارد را به عنوان آرگومان دریافت کند و عمل rotate را بر روی لاگها انجام دهد. مثلاً:
توجه کنید که علاوه بر فایلهای لاگ، ممکن است فایلها و پوشههای دیگری نیز در کنار app.log
وجود داشته باشد که اسکریپت نباید در آنها تغییری ایجاد کند.
اسکریپت rotate.sh
را Zip کنید و به عنوان پاسخ ارسال کنید. دقت کنید که اسکریپت باید مستقیماً در ریشه فایل Zip باشد (در هیچ پوشهای نباشد).
یک اسکریپت Bash با نام myfind.sh
بنویسید که یک فایل و یک رشته را بگیرد و کل متن فایل را به این صورت در خروجی استاندارد بنویسد:
در ابتدای خطوطی که رشته دادهشده در آن خطوط وجود ندارد، دو کاراکتر فاصله و در ابتدای خطوطی که رشته دادهشده در آن خطوط وجود دارد، یک +
و سپس یک فاصله بیاید.
تشخیص این که رشته دادهشده در یک خط وجود دارد یا خیر باید به صورت case insensitive باشد.
به عنوان مثال، اگر مختوای فایل sample.cpp
به صورت زیر باشد:
با اجرای دستور bash myfind.sh sample.cpp 'iNt m'
خروجی به صورت زیر خواهد بود:
اسکریپت myfind.sh
را Zip کنید و به عنوان پاسخ ارسال کنید. دقت کنید که اسکریپت باید مستقیماً در ریشه فایل Zip باشد (در هیچ پوشهای نباشد).
شرکت "زمانبندان" قصد دارد سیستم ثبت زمانی را برای کارمندانش پیاده سازی کند از آنجایی که ثبت زمان کارمندان برای همه شرکتها دغدغه مهم به حساب میآید این سیستم را به صورتی پیاده سازی کردهاند که تمامی شرکتها بتوانند با ساختن یک اکانت از آن استفاده کنند. شمای دیتابیس به صورت زیر است.
-- Section1 your first query here -- Section2 your second query here -- Section3 your third query here ```