- محدودیت زمان: ۳ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
امیرمحمد به دلیل اوضاع فعلی، در خانه مانده و حوصلهاش سر رفته است. او میخواهد برای ایجاد سرگرمی و مفید بودن، سیستمی طراحی کند که مانند یک دیتابیس عمل میکند.
هر دیتابیس شامل چند جدول است که از طریق اسم هر جدول، میتوان به آن دسترسی داشت. خود هر جدول شامل چند سطر و چند ستون است؛ به طوری که هر ستون یک عنوان و یک جنس دارد که میتواند رشته یا عدد باشد و محتواهای آن ستون حتما باید از آن جنس باشند.
امیرمحمد میخواهد برای سیستمش، بخش مدیریت کاربر نیز بگذارد به اینصورت که دو سطح دسترسی editor
و viewer
وجود داشته باشد. کاربر با سطح دسترسی editor
میتواند تمام دستورات را انجام دهد ولی کاربر با دسترسی viewer
تنها میتواند دستورات print
و search
را انجام دهد (در ادامه تعریف این دو دستور آمده است) و اگر درخواست انجام دستور دیگری به غیر از این ۲ نوع دستور را داشت، باید عبارت access denied
را چاپ شود.
در ادامه دستورات موجود در این سیستم را میبینید:
دستور اضافه کردن کاربر
این دستور به این معناست که یک کاربر جدید با نام کاربری username
و سطح دسترسی گفته شده، به سیستم اضافه شود. username
یک رشته شامل حروف کوچک انگلیسی میباشد و تضمین میشود که هیچ دو کاربری، نام کاربری یکسان ندارند. تضمین میشود در هر کوئری کاربری که درخواست میدهد، حتما وجود داشته باشد.
دستور ایجاد و حذف کردن جدول
برای ایجاد و یا حذف یک جدول به ترتیب از دستورهای زیر استفاده میشود:
که به ترتیب بیانگر این میباشد که کاربر با نام کاربری username
درخواست اضافهکردن و یا حذف یک جدول با نام table_name
را داده است.
همچنین در ابتدا هر جدول که تعریف میشود، هیچ سطر و ستونی وجود ندارد و در ادامه میتوان به آن، سطر و ستون اضافه کرد.
اضافه و حدف کردن ستون
برای اضافه کردن ستون به سمت راست جدول، از دستور زیر استفاده میشود:
که بیانگر این میباشد کاربر با نام کاربری username
به ترتیب، درخواستی برای ایجاد یک ستون با نام column_name
در جدول table_name
کرده و جنس آن ستون هم در کلمه پنجم مشخص میشود؛ هنگامی که یک ستون اضافه میشود، در صورتی از جنس عدد باشد، سطرهای این ستون با مقدار ۰ و در غیراینصورت با رشته null
پر میشوند. (توجه کنید که منظور از رشتهی null
، یک رشتهی به طول ۴ میباشد و نه رشتهی تهی!)
همچنین تضمین میشود در این فرآیند، هیچوقت دو ستون همنام باهم در یک جدول وجود ندارند و همزمان هیچ دو جدولی نام یکسان نیز ندارند.
دستور بعدی، برای حذف کردن یک ستون از جدول میباشد:
که بیانگر این است کاربر با نام کاربری username
درخواست حذف ستون با نام column_name
در جدول با نام table_name
را داده است.
اضافه و حذف کردن سطر
کاربر با نام کاربری username
برای اضافه کردن یک سطر به آخر جدول با نام table_name
از دستور زیر استفاده میکند (در هنگام استفاده از این کوئری تضمین میشود حداقل یک ستون در جدول وجود دارد):
توجه کنید که وقتی یک سطر اضافه میشود، در ستونهایی که از جنس عدد باشند، مقدار ۰ و در باقی ستونها رشته null
گذاشته میشود.(توجه کنید که منظور از رشتهی null
، یک رشتهی به طول ۴ میباشد و نه رشتهی تهی!)
همچنین کاربر با نام کاربری username
در جدول table_name
برای حذف کردن یک ردیف که از بالا به پایین، امین سطر میباشد، از دستور زیر استفاده میکند:
تغییر دادن مقدار یک خانه
کاربر با نام کاربری username
برای تغییر مقدار خانه واقع در سطر ام و ستون با نام column_name
در جدول table_name
به مقدار value
از دستور زیر استفاده میکند:
توجه کنید که اگر این ستون از جنس عدد باشد، value
عدد است و در غیراینصورت یک رشته از حروف کوچک انگلیسی است.
چاپ کردن
این سیستم قابلیت این را دارد که بتوان چند ستون از یک جدول را مشخص کرد و جدول را بر اساس ستونهای مشخص شده، به ترتیب اولویت مرتب کرد و در نهایت چاپ کرد.
برای اینکار اگر کاربر با نام کاربری username
بخواهد جدول با نام table_name
را بر اساس ستونهای با نامهای col_1
، col_2
،...، col_k
مرتب کند و سپس جدول را خروجی دهد، از دستور زیر استفاده میکند:
در این دستور، شما باید ردیفهای جدول را به ترتیب بر اساس ستونهای col_1
، col_2
،...،col_k
به ترتیب صعودی مرتب کنید. یعنی ابتدا برحسب ستون col_1
مرتب کنید، سپس ردیفهایی که مقدارشان در ستون col_1
برابر بود، بر اساس مقدارشان در ستون col_2
مرتب کنید و... . همچنین در نهایت اگر دو سطر تمامی مقادیرشان در این ستون یکسان بود، بر اساس زمان اضافه شدن سطرها به جدول مرتبشان کنید (یا به عبارتی دیگر بر اساس اندیس سطرها در جدول اولیه).
در نظر داشته باشید که ترتیب ردیفها در جدول اصلی عوض نمیشود، و با این درخواست صرفا باید جدول مرتب شده بر اساس اولویتها خروجی داده شود.
توجه کنید که اگر یک ستون از جنس رشته باشد، مقادیر آن بر اساس ترتیب کتابخانهای به صورت صعودی مرتب میشوند و در غیر این صورت بر حسب مقدار عددی مرتب میشوند.
کاربر با نام کاربری username
برای خروجی دادن کل جدول table_name
از دستور زیر استفاده میکند: (توجه کنید که در این دستور، سطرهای جدول باید به ترتیب زمان اضافه شدن به جدول، چاپ شوند و نیازی به مرتبسازی نیست)
جستوجو در جدول
این سیستم، قابلیت جستوجو بر حسب یک پارامتر خاص نیز دارد. به این صورت که کاربر با نام کاربری username
درخواست میدهد تا تمامی سطرهای جدول table_name
، که مقدار آنها در ستون با نام column_name
دقیقا برابر با value
است، چاپ شوند (توجه کنید که تمامی عناصر آن سطر باید چاپ شوند). برای اینکار از دستور زیر استفاده میکند: (در این دستور، سطرهای جدول باید به ترتیب زمان اضافه شدن به جدول، چاپ شوند)
همچنین اگر این ستون از جنس عدد باشد، value
یک عدد است و اگر جنس این ستون رشته باشد، value
یک رشته است.
تضمین میشود که تنها از دستورات بالا داده میشود و هنگامی که درخواستی داده میشود، تمامی ستونها و جدولهایی که در آن دستور قید شدهاند، وجود دارند و همچنین هیچ دو جدول و هیچ دو ستونی با نام یکسان همزمان وجود ندارند.
در نهایت پس از پایان عملیاتها، در خط آخر ورودی عبارت done
میآید.
پیشنهاد میشود حتما به ورودی نمونه و پاسخ آن دقت کنید.
ورودی
ورودی شامل تعدادی خط میباشد، که در هر خط، یکی از دستوراتی که در بالا تعریف شدهاند، آمده است.
همچنین در نهایت، در خط آخر ورودی، عبارت done
میآید که برای تشخیص تمام شدن ورودیها میباشد.
تضمین میشود مجموع کاراکترهای ورودی حداکثر میباشد.
همچنین تمامی رشتهها، شامل حروف کوچک انگلیسی میباشند و هیچکدام از اسمهای جدولها، ستونها و... شامل فاصله (space) نمیباشد.
تمامی دستورات معتبر میباشند یعنی اگر اسم جدول یا ستون یا... در یکی از دستورات آورده شود، تضمین میشود حتما آن جدول، ستون یا... وجود دارد.
خانههایی از جدول که از جنس عدد باشند، در بازهی میباشند و همچنین طول رشتهها کمتر مساوی ۵۰ میباشد.
خروجی
به ازای هر دستور مربوط به print
و search
، جدول را مطابق با دستور داده شده خروجی دهید.
توجه کنید که در خروجی، نام ستونها را نباید چاپ کنید و همچنین هر سطر در یک خط چاپ شود و در هر خط بین مقادیر دو ستون متوالی باید دقیقا یک فاصله (space) باشد.
برای درک بهتر، به مثالهای نمونه توجه کنید.
مثال
ورودی نمونه ۱
خروجی نمونه ۱
در ابتدا هنگامی که کاربر sajad
درخواست ساخت جدول میدهد، access denied
چاپ میشود.
در دستورات print
و search
که در ادامه آمدهاند، به ترتیب خروجیهای زیر چاپ میشوند:
ارسال پاسخ برای این سؤال