- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
میخواهیم سامانهای برای مدیریت کالج طراحی کنیم. در یک کالج ۳ نوع کاربر باید قابل تعریف باشد. «عضو»، «مربی» و «مدیر». هر کدام از این افراد یک نام کاربری شناسایی میشوند.
بالاترین سطح دسترسی به ترتیب متعلق به «مدیر»، «مربی» و «عضو» است.
هر حساب کاربری بعد از ثبت نام در حالت «غیرفعال» است. زمانی یک حساب فعال میشود که یک «مدیر» آن را فعال کند. همچنین مدیران و مربیها نیاز دارند تا لیست کاربرهایی که «غیر فعال» هستند را داشته باشند.
از شما میخواهیم برنامهای بنویسید که درخواستهای زیر را برآورده کند.
عضویت در سامانه
فرمت کلی این دستورات به صورت زیر است:
یعنی کاربری با نام <USERNAME>
درخواست عضویت با نقش <ROLE>
را دارد.
- اگر کاربری با این نام کاربری فعال یا غیرفعالی (با هر نقشی) قبلاً ثبت نام کرده است پیام
INVALID USERNAME
را چاپ کنید. - اگر
<ROLE>
، هیچکدام از مقدارهایADMIN
،MENTOR
یاMEMBER
نبود، پیامINVALID ROLE
را چاپ کنید. - در صورتی که هیچ کدام از اتفاقات بالا نیفتاد،
WAITING FOR ACCEPT
را چاپ کنید.
همواره کاربرها بعد از اضافه شدن «غیرفعال» هستند و باید منتظر فعال شدن بمانند.
تایید کردن عضویت
فرمت کلی این دستورات به صورت زیر است:
یعنی کاربر <USERNAME1>
میخواهد کاربر <USERNAME2>
را به حالت فعال تبدیل کند.
- اگر کاربری با نام
<USERNAME1>
وجود ندارد، پیامINVALID USERNAME
را چاپ کنید. - اگر کاربر
<USERNAME1>
فعال نیست، پیام WAITING FOR ADMIN
را چاپ کنید. - اگر کاربر
<USERNAME1>
نقشADMIN
ندارد پیام<USERNAME1> IS NOT ADMIN
را چاپ کنید. - اگر کاربری با نام
<USERNAME2>
وجود ندارد، پیامINVALID USERNAME
را اعلام کنید. - اگر کاربر
<USERNAME2>
اکنون فعال است، پیام<USERNAME2> IS ACTIVE
را چاپ کنید. - در صورتی که هیچ کدام از حالتهای بالا پیش نیامد کاربر
<USERNAME2>
را فعال کنید و پیام<USERNAME2> ACTIVATED
را چاپ کنید.
رد کردن عضویت
یعنی کاربر <USERNAME1>
میخواهد کاربر <USERNAME2>
را فعال نکند و درخواست عضویت او را پاک کند.
- اگر کاربری با نام
<USERNAME1>
وجود ندارد، پیامINVALID USERNAME
را چاپ کنید. - اگر کاربر
<USERNAME1>
فعال نیست، پیام WAITING FOR ADMIN
را چاپ کنید. - اگر کاربر
<USERNAME1>
نقشADMIN
ندارد، پیامUSERNAME1> IS NOT ADMIN>
را چاپ کنید. - اگر کاربری با نام
<USERNAME2>
وجود ندارد، پیامINVALID USERNAME
را اعلام کنید. - اگر کاربر
<USERNAME2>
اکنون فعال است، پیامUSERNAME1> IS ACTIVE>
را چاپ کنید. - در صورتی که هیچ کدام از حالتهای بالا پیش نیامد کاربر
<USERNAME2>
را از لیست انتظار حذف کنید و پیام<USERNAME2> REJECTED
را چاپ کنید.
صف انتظار تایید
- اگر کاربری با نام
USERNAME
وجود نداشت، پیامINVALID USERNAME
را چاپ کنید. - اگر کاربر غیرفعال بود، پیام
WAITING FOR ADMIN
را چاپ کنید. - اگر این کاربر نقش
MEMBER
داشت، پیامNOT ENOUGH ACCESS
را چاپ کنید. - در صورتی که هیچ کدام از اتفاقات بالا رخ نداد، نام کاربری افرادی که درخواست عضویت دادند و هنوز «غیرفعال» هستند را به ترتیب لغتنامهای (در مقایسهی رشتهها ارزش حروف کوچک و بزرگ را یکسان در نظر بگیرید.) چاپ کنید. اگر هیچ کاربری این وضعیت را نداشت پیام
NO USER
را چاپ کنید.
تغییر نقش
- اگر کاربری با نام
<USERNAME1>
یا<USERNAME2>
وجود ندارد، پیامINVALID USERNAME
را چاپ کنید. - اگر کاربری با نام
<USERNAME1>
یا<USERNAME2>
غیرفعال است، پیام WAITING FOR ADMIN
را چاپ کنید. - اگر
<ROLE>
هیچ کدام از سه نقش گفته شده نبود، پیامINVALID ROLE
را چاپ کنید. - اگر نقش
<USERNAME1>
پایینتر از<USERNAME2>
است یا هردو نقش یکسانی دارند،NOT ENOUGH ACCESS
را چاپ کنید. - اگر نقشی که
<USERNAME1>
میخواهد نقش<USERNAME2>
را به آن تغییر بدهد، بالاتر از نقش خود اوست (مثلاً خودMENTOR
است و میخواهد<USERNAME2>
را بهADMIN
تغییر دهد)،INVALID CHANGEROLE
را چاپ کنید. (تغییر نقش زمانی مجاز است که<USERNAME2>
به نقشی پایینتر یا هم تراز<USERNAME1>
تغییر پیدا کند). - اگر نقش کاربر با این دسترسی تغییری نمیکند، پیام
ALREADY HAS THIS ROLE
چاپ کنید. - در صورتی که هیچ کدام از تغییرات بالا اتفاق نمیافتد، نقش
USERNAME2
را بهROLE
تغییر دهید و پیامROLE CHANGED SUCCESSFULLY
را چاپ کنید.
وضعیت کاربر
نام کاربری، نقش و فعال بودن آن را با این الگو چاپ کنید:
اگر کاربری با نام <USERNAME>
وجود ندارد، پیام INVALID USERNAME
را چاپ کنید.
اگر کاربر فعال است:
username: <USERNAME> role: <ROLE> active
در غیر این صورت:
username: <USERNAME> role: <ROLE> not active
نکات
- توجه کنید در هر دستور باید فقط یک پیام چاپ کنید و اگر چند حالت باهم پیش آمد شرایطی که زودتر بیان شده بود، الویت دارد.
- هر رشتهای که در ورودی داده میشود، شامل حروف کوچک و بزرگ انگلیسی به طول حداقل ۱ و حداکثر ۱۰ کاراکتر است.
- در ابتدا یک کاربر با نام کاربری
ADMIN
و نقشADMIN
به صورت فعال در سامانه وجود دارد.
ورودی
در سطر اول ورودی، عدد صحیح و مثبت داده میشود که تعداد دستورها را نشان میدهد.
در سطر بعدی، در هر سطر یکی از دستورهایی که در بالا تعریف شده، داده میشود.
خروجی
برای هر دستور، خروجی مورد نظر را چاپ کنید. تضمین میشود ورودیها طوری داده شود که مجموع کاراکتر خروجیها از بیشتر نشود.
مثال
ورودی نمونه ۱
خروجی نمونه ۱
ارسال پاسخ برای این سؤال