گاوصندوقی تا چرخانه دارد که روی هرکدام، ترتیبی از اعداد ۱ تا ۹ قرار دارد. زیر هر چرخانه یک نشان وجود دارد که به یکی از اعداد چرخانه اشاره میکند و با چرخاندن چرخانه، این عدد تغییر میکند. حال یک عدد رقمی بعنوان رمز داده شده، حداقل تعداد چرخاندن چرخانهها برای این که اعداد اشاره شده برابر عدد رمز باشد چقدر است؟
در خط اول آمده است. در خط دوم رمز که یک رشتهی رقمی متشکل از ارقام ۱ تا ۹ است آمده است. در خط اُم از خط بعدی در هر خط ترتیب ارقام روی چرخانهی اُم به ترتیب ساعتگرد آمده است. اولین رقم رقم اشاره شده است.
حداقل تعداد چرخاندن چرخانهها برای این که اعداد اشاره شده برابر عدد رمز باشد را چاپ کنید.
توضیح: میتوان با این چرخشها در ۷ حرکت به رمز هدف رسید:
یک دنباله داریم. اختلاف هر دوعدد پشت سر هم (راستی منهای چپی!) را بدست میآوریم، در نتیجه یک دنبالهی دیگر به وجود میآید که طولش از دنبالهی اولیه یکی کمتر است. دوباره این کار را انجام میدهیم. این عمل را تکرار میکنیم تا دنبالهی نهایی تک عنصری شود. مقدار باقیماندهی آن عدد پس از تقسیم بر را خروجی دهید. دقت کنید که ممکن است عدد نهایی منفی شود، اما مقدار باقیماندهی عدد نهایی بر همیشه عددی نامنفی است.
در خط اول ورودی عدد آمده است. در خط بعد دنباله داده شده است.
اعداد دنباله، نامنفی و حداکثر هستند.
باقیماندهی عدد نهایی پس از انجام این پروسه بر را چاپ کنید.
به تعداد بادکنک در یک ردیف قرار دارند. رنگ بادکنک ام است. در ابتدای هر روز همزمان بادکنکهای هر دسته از بادکنکهای پشت سر هم و هم رنگ که شامل حداقل ۳ بادکنک باشد میترکند و در پایان هر روز بادکنکهای باقیمانده دوباره در یک ردیفِ پیوسته با همان ترتیب قرار میگیرند. میخواهیم بدانیم هر بادکنک در چه روزی میترکد.
در خط اول ورودی عدد آمده است که تعداد بادکنکها را نشان میدهد.
به ازای هر بادکنک روز ترکیدنش را چاپ کنید، اگر یک بادکنک هیچگاه نمیترکد -1
را چاپ کنید.
در یک جدول در ، روی هر خانه یک عدد نوشته شده. خانهی میخواهیم شروع کنیم و در جدول حرکت کنیم و در مسیر حرکت از بیشترین تعداد خانهی ممکن عبور کنیم (یمررر)، با رعایت کردن این شرایط:
در مسیر حرکت، عدد نوشته شده روی هر خانه باید اکیداً کمتر از عدد نوشته شده روی خانهی بعدی آن باشد.
در هر حرکت به سطر یا ستون مجاور حرکت میکنیم و حداقل ۳ خانه جابجا شویم. به بیان ریاضی، اگر در یک حرکت از به رفتیم، باید یکی از شرایط زیر برقرار باشد:
و
و
در خط اول ورودی عدد آمده است که اندازهی جدول را نشان میدهد. در خط بعد و آمده است. در خط بعدی جدول آمده است.
بیشترین تعداد خانهای که میتوان با رعایت شروط گفته شده از آنها یمررر کرد (عبور کرد) را چاپ کنید.
زیرمسئله | نمره | محدودیت |
---|---|---|
۱ | ۸۰ | |
۲ | ۱۰۰ | بدون محدودیت اضافی |
مسیر مورد نظر به این شکل است:
کد شما باید روی MySQL قابل اجرا باشد.
پایگاه دادهای با Schema زیر در اختیار شما قرار گرفته است:
توجه کنید:
کوئریهای sql خواستهشده از شما موارد زیر است: (توجه کنید که هر کوئری نمرهای جداگانه دارد و اگر کوئری یک قسمت را نتوانستید بزنید، کوئریهایی که حل کردید را بفرستید و قسمت آن کوئری را خالی بگذارید.)
Person
افرادی وجود دارند که در هیچکدام از جداول Refree
, Player
, Coach
وجود ندارند، اینگونه افراد را به جدول Player
اضافه کنید و تیم همه آنها را Chelsea
و سن همه آنها را 24
در نظر بگیرید.name
و id
تمام مربیانی که بازیکن نیز هستند اما تیمی که مربیگری میکنند با تیمی که درآن بازی میکنند متفاوت است.Team
از جدول Player
به جدول Team
کلید خارجی ندارد، از شما میخواهیم کوئری بزنید که این کلید خارجی را ایجاد کند به گونه ای که پس از حذف تیمی از جدول Team
تمام بازیکنانی که در آن تیم بازی میکردند نیز از جدول Player
حذف شوند.
(راهنمایی: میتوانید از ALTER TABLE
استفاده کنید) در یک فایل با نام code.sql
کد خود را قرار دهید و آن را فشرده (zip
) کنید و در سایت بارگذاری نمایید.
کد شما باید به صورت زیر باشد(نام فایل zip مهم نیست).
کد شما باید روی MySQL قابل اجرا باشد.
در این سوال پایگاه داده یک شرکت حمل و نقل آنلاین که وظیفه سرویسدهی به تماشاچیان جامجهانی را دارد، در اختیار شما قرار گرفته است.
مقصد همه سفرهای این شرکت، حتما یک ورزشگاه است.
جداول این پایگاهداده به صورت زیر است:
جدول مسافر Passenger
:
اسم ستون | نوع | تعریف | ملاحظات |
---|---|---|---|
اسم مسافر | |||
ایمیل مسافر | یکتا | ||
اعتبار فعلی مسافر |
جدول راننده Driver
:
اسم ستون | نوع | تعریف | ملاحظات |
---|---|---|---|
اسم راننده | |||
ایمیل راننده | یکتا |
جدول ورزشگاهStadium
:
اسم ستون | نوع | تعریف | ملاحظات |
---|---|---|---|
اسم ورزشگاه | |||
آدرس ورزشگاه | |||
ظرفیت ورزشگاه |
جدول سفرTravel
:
اسم ستون | نوع | تعریف | ملاحظات |
---|---|---|---|
شناسه یکتای سفر | |||
اسم ورزشگاه مقصد | کلید خارجی به جدول ورزشگاه | ||
اسم راننده | کلید خارجی به جدول راننده | ||
اسم مسافر | کلید خارجی به جدول مسافر | ||
هزینه سفر | عددی بین ۱ تا ۱۰۰ |
در این سوال از شما خواسته شده تا دستور ساختprocedure
های زیر را پیاده سازی کنید و بفرستید.
(توجه کنید که هر procedure
نمرهای جداگانه دارد و اگر procedure
یک قسمت را نتوانستید بزنید، procedure
هایی که حل کردید را بفرستید و قسمت آن procedure
را خالی بگذارید.)
procedure
ای که ظرفیت همه ورزشگاهها را ۱۰۰ واحد کم کند.نام procedure
شما باید proc1
باشد و به طور مثال به شکل CALL proc1();
فراخوانی میشود.
procedure
ای که یک ورودی عددی میگیرد و ایمیل رانندههایی که بیش از این مقدار درآمد داشتهاند را برمیگرداند.نام procedure
شما باید proc2
باشد و به طور مثال به شکل CALL proc2(1000);
فراخوانی میشود.
procedure
ای که دو ورودی میگیرد که اولی تعداد سفر و دومی ایمیل راننده تاکسی است و نام مسافرانی که بیشتر از عدد اول سفر با این راننده تاکسی داشتهاند را برمیگرداند.نام procedure
شما باید proc3
باشد و به طور مثال به شکل CALL proc3(2,'milad@example.com');
فراخوانی میشود
توجه کنید که دستوراتی که شما میفرستید باید صرفا برای ساخت procedure
باشد.
همچنین کدی که برای ما میفرستید نباید به هیچ وجه delimiter داشته باشد.
در یک فایل با نام code.sql
کد خود را قرار دهید و آن را فشرده (zip
) کنید و در سایت بارگذاری نمایید.
کد شما باید به صورت زیر باشد(نام فایل zip مهم نیست).
میخواهیم یک برنامه ساده برای مدیریت task بنویسیم.
برای این کار از شما میخواهیم یک اسکریپت Bash با نام task.sh
بنویسید. میتوانید با پیادهسازی بخشی از خواستهها،
بخشی از نمره را بگیرید.
هر task یکی از ۳ اولویت پایین (L)، متوسط (M) و بالا (H) را دارد.
لیست task ها در فایل متنی tasks.txt
ذخیره میشود.
ممکن است هنگام اجرا، این فایل وجود نداشته باشد. در این صورت
برنامه شما باید آن را ایجاد کند.
در هر سطر از این فایل یک task به این صورت ذخیره میشود:
ابتدا اولویت (یکی از حروف H, M, L
)، سپس یک کاراکتر فاصله و سپس
عنوان task میآید.
شماره task ها بر اساس ترتیب آنها در این فایل مشخص میشود. اولین سطر این فایل task شماره ۱ است.
یک مثال:
اسکریپت باید توانایی اجرای دستورات add, list, done
را به صورت زیر داشته باشد:
در ادامه توضیح دقیق هریک از این دستورات آمده است. در انتهای متن نیز مثالی آمده که همه چیز را روشنتر میکند.
add
🔗این دستور، task با عنوان دادهشده را به انتهای لیست اضافه میکند.
در صورتی که در انتهای عنوان، عبارت (important)
یا (very important)
باشد
(بدون توجه به بزرگی و کوچکی حروف)،
اولویت به ترتیب M
و H
خواهد بود. در غیر این صورت اولویت L
است.
پس از اضافه کردن، باید پیام زیر در خروجی استاندارد نوشته شود:
list
🔗این دستور لیست task ها را مانند مثالهای زیر نمایش میدهد.
برای اولویت پایین، ۱ ستاره، برای اولویت متوسط ۳ ستاره و برای اولویت بالا ۵ ستاره نمایش داده میشود. به فاصلههای هر خط توجه کنید.
در صورت خالی بودن لیست، عبارت No tasks found...
را در خروجی استاندارد بنویسید.
done
🔗این دستور task با شمارهی داده شده را حذف میکند و پیام زیر را در خروجی استاندارد مینویسد:
در صورتی که دستوری به جز دستورهای بالا داده شد، برنامه باید با کد ۱ خارج شود و پیام خطای زیر را در stderr بنویسد:
همچنین اگر در ادامهی دستورهای add
و done
هیچ آرگومانی داده نشد،
برنامه باید با کد ۱ خارج شود و این پیام را در stderr بنویسد:
نمونهای از عملکرد اسکریپت را در زیر میبینید:
task.sh
را آپلود کنید.وبسرور Nginx یکی از بهترین وبسرورهای متنباز با کارایی بالا و امکانات زیاد است که اولین بار در سال ۲۰۰۴ منتشر شد. این وبسرور به دلیل کارایی بالا، در بسیاری سایتهای پرترافیک مانند Dropbox و Netflix استفاده شده است. بله! وبسرور مورد استفاده Quera نیز Nginx است.
در این سؤال میخواهیم تنظیماتی در این وبسرور (در لینوکس) انجام دهیم.
در سرور موردنظر فایل nginx.conf
به صورت زیر تنظیم شده است:
از شما میخواهیم فایل /etc/nginx/conf.d/mysite.conf
را ایجاد کنید
و طبق نیازمندیهای زیر تنظیمات مورد نیاز را در آن انجام دهید.
میخواهیم با رسیدن درخواست به http://localhost/static/
، فایلهای
پوشه /usr/share/nginx/static
سرو (serve) شود. مثلاً در صورتی که محتوای این
پوشه به شکل زیر باشد، با مراجعه به آدرس
http://localhost/static/style/style.css
باید فایل style.css
ارسال شود.
میخواهیم از بین فایلهای قسمت قبل، فایلهای CSS و JS با gzip فشرده شوند. توجه کنید که سایر فایلها نباید فشرده شوند.
میخواهیم هر درخواستی که به http://localhost/blog
رسید به
https://blog.quera.ir
منتقل (redirect) شود.
چند مثال:
آدرس درخواست | انتقال به |
---|---|
http://localhost/blog |
https://blog.quera.ir |
http://localhost/blog/ |
https://blog.quera.ir/ |
http://localhost/blog/category/feature/ |
https://blog.quera.ir/category/feature/ |
برای انتقال از کد ۳۰۲ یا ۳۰۷ (انتقال موقت) استفاده کنید.
میخواهیم فایلهای پوشه static (که در نیازمندی اول serve شد) تا ۲۴ ساعت در مرورگر cache شوند.
میخواهیم درخواستهایی که از طرف curl ارسال میشود با پاسخ ۴۰۳ مواجه شود.
nginx.conf
) وجود ندارد.mysite.conf
را آپلود کنید.در یک اپ ورزشی، میخواهیم بروزرسانی مخصوص جام جهانی را منتشر کنیم. در این بروزرسانی (که البته قبل از شروع جام جهانی قرار بود منتشر شود!)، میخواهیم بتوانیم رتبهبندی تیمها در مرحله گروهی را شبیهسازی کنیم. ساختار اولیهی کدی که قرار است این شبیهسازی را انجام دهد به شما داده میشود و شما باید آن را تکمیل کنید.
(منبع : دیجیکالا مگ)
به طور کلی، تیمی از یک گروه صعود پیدا میکند که امتیازات بیشتری نسبت به حریفان خود داشته باشد. این بند شامل جمع امتیازات برد (۳ امتیاز)، مساوی (۱ امتیاز) و باخت (۰ امتیاز) است.
از بین تیمهای همامتیاز، تیمی صعود میکند که تفاضل گل بیشتری داشته باشد. تفاضل گل یعنی اختلاف گلهای زده شده با خورده شدهی یک تیم.
بند سوم قانون فیفا بر این اساس است که تیمی که بیشترین گل زده را دارد مستحق صعود است. پس بین دو تیمی که امتیازشان برابر است و تفاضل گلشان نیز برابر است، تیمی که بیشتر گل زده رتبهی بهتری میگیرد.
حالا نوبت به نحوهی بازی این تیمها میرسد. فیفا در این شرایط ویژه که امتیاز، تفاضل گل، و تعداد گل زده دو تیم برابر باشد، به تیمی اجازهی صعود میدهد که کمترین کارت را در بازیها گرفته باشد. البته هر کارت امتیازات منفی مشخصی دارد، ولی برای سادهتر شدن صورت این سوال فرض میکنیم تیمی که تعداد کمتری کارت در بازیها دریافت کرده در رتبهی بهتری قرار میگیرد.
اگر دو تیم در مرحلهای از بازی در هر ۴ مورد بالا مشابه هم باشند، فرض میکنیم رتبهشان برابر است. مثلاً در ابتدای جام که هیچ بازیای صورت نگرفته رتبهی همهی ۴ تیم در یک گروه برابر ۱ است، و امسال در گروه تیم ملی کشورمان پس از بازی پرتغال - اسپانیا و ایران - مراکش، ایران صدرنشین گروه بود و رتبهی هر دو پرتغال و اسپانیا برابر ۲ بود و مراکش که امتیازش از آنها کمتر بود، رتبهی ۴ را داشت.
فایل مربوط به خود را دانلود کرده و محتوای آنرا ببینید:
*فایل مربوط به زبان Java : * QorldCup.java
*فایل مربوط به زبان Python3: * QorldCup.py
*فایل مربوط به زبان ++C : * qorld_cup.cpp
فایل مربوط به زبان #C (با کامپایلر #Mono C): QurldCup.cs
پروژهی اولیه شامل کلاس qorld_cup است که در آن توابع زیر را باید تکمیل کنید. شما میتوانید در این کلاس هر تعداد متغیر اضافی که خواستید تعریف کنید، اما متغیر خارج از کلاس بصورت global نباید تعریف کنید. (در صورت تعریف کردن ممکن است نمرهای دریافت نکنید.)
تابع initial که لیست نام کوتاه ۳۲ کشور حاضر در این دوره از جام جهانی را ورودی میگیرد، که ۴ تای اول در گروه ۱، ۴ تای دوم در گروه ۲، و همینطور تا ۴ تای هشتم که در گروه ۸ هستند. نام کوتاه هر کشور یک رشته از حروف بزرگ انگلیسی حداکثر ۳ حرفی است. مثلا ایران IRN
است و چین CHN
است.
تابع add_game_result که ۶ پارامتر ورودی میگیرد: به ازای هر یک از ۲ تیم: نام کوتاه تیم، تعداد گلهای زده در این بازی، و تعداد کارتهای دریافت کرده در این بازی.
تابع get_score که نام کوتاه یک تیم را ورودی میگیرد و امتیازش را برمیگرداند.
تابع get_rank که نام کوتاه یک تیم را ورودی میگیرد و رتبهاش در گروه خودش را برمیگرداند.
میتوانید کد خود را بوسیلهی stdin و stdout در کنسول تست کنید. پس از اجرا کردن کد، ابتدا تعداد دستوراتی که میخواهید به برنامه بدهید را بنویسید. سپس نام کوتاه ۳۲ تیم را وارد کنید تا به تابع initial داده شود، و سپس میتوانید به شکل زیر با توابع ارتباط داشته باشید:
فرض کنید ورودی initial
مانند جام جهانی امسال بوده باشد. این ۱۰ تعامل با کد نمایانگر ۲ بازی ابتدایی در گروه تیم ملی کشورمان میباشد، و وضعیت گروه پس از این ۲ بازی را نشان میدهد:
و خروجیهای برنامه چنین میشود:
فایل ابتدایی مربوطه را دریافت کرده و توابع گفته شده را تکمیل کرده و ارسال کنید. تنها کلاس مربوطه را تغییر دهید!
برای یک فروشگاه موبایل، با کمک شما قصد داریم برنامه مدیریت این فروشگاه را طراحی کنیم.
کالاهای این فروشگاه موبایل های با برند Apple ،htc و Samsung هستند.
در صورت سوال نام توابع برای python توضیح داده شده برای بقیه زبانها نیز مشابه میباشد.
ابتدا فایل مربوط به خود را دانلود کرده و محتوای آن را ببینید (همچنین ورودی ها و خروجی های توابع) :
*فایلهای مربوط به زبان python : * دریافت
*فایلهای مربوط به زبان java: * دریافت
*فایلهای مربوط به زبان C#: * دریافت
برای هر کدام از کلاسها تعدادی از تابعهایی که نیاز به توضیح داشته باشند توضیح آمده است.
ویژگی های کلاس Mobile : نام، قیمت
can_purchase
: چک میکند که آیا کاربر مشخص شده در ماه مشخص شده قادر به خرید این موبایل هست یا خیر. توجه کنید اگر این تابع True
برگرداند یعنی امکان خرید این محصول توسط کاربر وجود دارد و بلافاصله میتوان عملیات خرید را انجام داد.reverse_payment_price
: قیمتی که قرار است در حالت بازگشت محصول برگردانده شود را برمیگرداند. این تابع توسط کلاس Shop
فراخوانی میشود.get_final_price
: قیمت موبایل را با احتساب تخفیفهای مختلف محاسبه کرده، برمیگرداند. توجه کنید اگر دو تخفیف به یک محصول تعلق بگیرد تخفیفها در هم ضرب میشوند مثلا جنس ۱۰۰۰ تومانی پس از دو تخفیف ۱۰ درصدی ۸۱۰ تومان خواهد بود. تست ها طوری طراحی میشوند که مقادیر پس از تخفیف اعشاری نباشند.ویژگی های کلاس Shop : موبایل های موجود فروشگاه، درآمد فروشگاه (موجودی)
get_available_mobile_count
: تعداد mobile هایی که فروشگاه دارد را برمیگرداند.get_available_mobile_of_type
: تعداد mobile هایی از نوع ورودی که در فروشگاه وجود دارد را برمیگرداند.add_number_of_mobile
: به تعداد ورودی به موجودی موبایلی که در ورودی آمده است به فروشگاه اضافه میکند.remove_one_mobile
: یکی از موجودی موبایلهای از نوع ورودی فروشگاه کم میکند.buy_mobile_request
: موبایل مورد نظر به کاربر فروخته میشود. باید موجودی کاربر کم شده، موبایل مورد نظر از لیست دارایی های فروشگاه حذف شود و به لیست موبایل های خریده شده کاربر اضافه شود. اگر درست انجام شود True
وگرنه False
برمیگرداند.giveback_request
: فروشگاه موبایل مورد نظر را پس میگیرد. موبایل بازگشته شده باید از موبایل های خریداری شده کاربر حذف شده و به موجودی فروشگاه اضافه شود. همچنین موجود (پول) کاربر و فروشگاه نیز باید به درستی تغییر کند. اگر درست انجام شود True
وگرنه False
برمیگرداند.get_instance
: کلاس Shop باید singleton باشد و تنها نمونهی آن، از طریق این تابع بازگردانده میشود.ویژگی های کلاس User : نام، موبایل های خریده شده، سن، مقدار پول
get_mobile_count
: تعداد موبایلهای فرد را برمیگرداند.get_mobiles
: یک dict برمیگرداند که کلید آن موبایل و مقدار هر کدام تعداد از این نوع موبایل است.purchase
: درخواست خرید موبایل مورد نظر را به فروشگاه میدهد.refund
: مبلغ مشخص شده را به کاربر بازمیگرداند.has_mobile_in_month
: اگر کاربر اکنون موبایلی از نوع ورودی دارد که در ماه ورودی خریده باشد مقدار True
وگرنه False
برمیگرداند.در سه ماه تابستان این فروشگاه ۱۰ درصد به مشتریان تخفیف میدهد.
iran
در اسم فرد باشد (به همین صورت و با حروف کوچک) این شرکت به او گوشی نمیفروشد. مثلا اگر کسی اسمش moiraniom
باشد این شرکت به او گوشی نمیفروشد. چون شاید با گوشی اورانیم غنی کند!توجه داشته باشید که تمام فایلها باید در ریشه فایل zip باشند برای c# بایستی MobileStore.csproj
در ریشه فایل zip قرار گیرد. یعنی پس از باز کردن فایل zip تمامی فایل کلاسها قابل مشاهده باشد.
میخواهیم به کمک شما قسمت سرور یک پیام رسان را طراحی کنیم.
این سرور قابلیت عضو شدن (یا register)، و برای افرادی که عضو شده اند قابلیت ورود (یا login) و برای افرادی که وارد شده قابلیت خروج (یا logout) را داشته باشد. همچنین این سرور قابلیت ارسال پیام از یک کاربر به کاربر دیگر را نیز دارد و همچنین برای هر کاربر قابلیت دریافت همه پیام های ارسالی را داشته باشد.
برای برقراری ارتباط کلاینت ها پیام ها را به port
شماره 1234
میفرستند و سرور باید به این port گوش بدهد تا کلاینت ها به آن متصل شوند.
بعد از برقراری ارتباط کلاینت با سرور هر بار که کلاینت یک درخواست میکند، سرور نیز یک یا چند پیام (بسته به نوع پیام فرستاده شده) ارسال میکند.
منظور از یک پیام یک رشته از هر کاراکتری (حتی فاصله) است.
این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و کلمه عبور (یا password) است. درصورت عدم وجود کاربری با این نام کاربری، این سرور یک حساب کاربری جدید ایجاد میکند و پیام "you registered successfully"
را به کلایت ارسال میکند.
فرمت درخواست:
register username password
مثال درخواست:
register mohammad pa3word
در صورت وجود کاربری با نام کاربری مشابه، این درخواست انجام نمیشود و سرور پیام "this username registered"
را به کلاینت ارسال میکند.
تضمین میشود دو رشته نام کاربری یا username و رمزعبور یا password شامل حداقل 3 کاراکتر و حداکثر 10 کاراکتر از حروف کوچک و بزرگ انگلیسی و ارقام باشد.
این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و رمز عبور (یا password) است. در صورت ثبت نام (یا register) بودن این نام کاربری و مطابق بودن رمزعبور با آن، سرور باید یک رشته به نام session که تاکنون برای هیچ کاربری ارسال نشده است را ایجاد و برای کلاینت ارسال کند. توجه کنید که رشته session باید شامل 30 کاراکتر از ارقام باشد.
فرمت درخواست:
login username password
مثال درخواست:
login mohammad pa3word
در صورت عدم تطابق نام کاربری با رمزعبور یا عدم ثبت نام این نام کاربری سرور پیام "wrong username or password"
را به کلاینت ارسال میکند.
این پیام حاوی یک رشته است که نشان دهنده session است. در صورت وجود کاربری با آن session فعال (یعنی این session را login کرده و هنوز logout نکرده است.) این session را از مجموعه session های فعال این کاربر خارج میکند و سرور پیام "your session logout successfully"
را به کلاینت ارسال میکند.
فرمت درخواست:
logout session
مثال درخواست:
logout 987654321098765432109876543210
در صورت عدم وجود چنین session سرور پیام "invalid session"
را به کلاینت ارسال میکند.
این پیام حاوی سه رشته session و username و message است و در صورت معتبر session و وجود یک کاربر با نام کاربری username ، پیام message را به همه session های فعال آن کاربر ارسال کند.
فرمت درخواست:
send session_of_sender contact_username message
مثال درخواست:
send 987654321098765432109876543210 ali salam baraadar
فرمت پیامی که باید برای کلاینت ارسال کنید:
sender: message
مثال فرمت پیام:
ali: salam baraadar
در صورت معتبر نبودن session سرور پیام "invalid session"
را به کلاینت اسال میکند.
در صورت عدم وجود کاربردی با نام کاربری username باید پیام "your contact did not register"
توسط سرور ارسال شود.
و در صورت موفقیت آمیز بودن ارسال پیام "your message send successfully"
ارسال شود.
این پیام حاوی یک رشته session است و در صورت معتبر بودن session، ابتدا تعداد پیام هایی که به این کاربر ارسال شده ولی این session هنوز دریافت نکرده است را به او ارسال میکند. سپس به همان تعداد پیام برای کلاینت ارسال می شود.
فرمت این درخواست:
receive 987654321098765432109876543210
فرمت پیام هایی که برای کلاینت ارسال میشود:
number_of_message$sender: message_1$sender: message_2
مثال پیام هایی که برای کلاینت ارسال می شود:
2$mahdi: salam$mahdi: khubi?
(هر رشته بین $
یک پیام ارسال شده است.)
توجه کنید حتی در صورت وجود یک پیام هم باید تعداد پیام ها ارسال شود.
در صورت معتبر نبودن session سرور پیام "invalid session"
را به کلاینت اسال میکند.
تضمین می شود حداکثر 20 کاربر به سرور متصل خواهد شد و حداکثر 50 درخواست داده میشود و طول پیام ها حداکثر 20 کاراکتر است.
اگر به زبان python میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.py
است. برای این کار پروژه خود را zip کرده به صورتی که server.py
در ریشه فایل zip قرار گیرد.
اگر به زبان java میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.java
است. برای این کار پروژه خود را zip کرده به صورتی که server.java
در ریشه فایل zip قرار گیرد.
اگر به زبان c++ میفرستید تعدادی فایل که فایل اصلی که اجرا میشود server.cpp
است. برای این کار پروژه خود را zip کرده به صورتی که server.cpp
در ریشه فایل zip قرار گیرد. توجه کنید که قبل از اجرا دستور make
صدا زده میشود و فایل server.cpp
باید به فایل اجرایی server
تبدیل شود.
اگر به زبان c# میفرستید یک پروژه باید داشته باشیم که نام این پروژه server
است این پروژه را به صورتی zip کنید که فایل server.csproj
در ریشه فایل zip قرار گیرد.
فایل zip را ارسال کنید.