سلام دوست عزیز😃👋
به مسابقهی «Yellow Bloom یکتانت - Software Engineering» خوش آمدید.
لینکهای مفید برای شرکت در مسابقه:
میتوانید سوالها و مشکلات خود را از بخش «سوال بپرسید» با ما در میان بگذارید.
توجه کنید که بر خلاف دیگر سوالات، سوال پروازهای روسیه دیتابیسی است و باید با PostgreSQL پیادهسازی شود.
موفق باشید 😉✌
میخواهیم یک سامانه برای پیشنهاد موقعیت کار به کارجوها طراحی کنیم. این سامانه باید بتواند اطلاعات آنها را دریافت کند و برای هر کارجو مناسبترین کار را پیشنهاد دهد. همچنین این سیستم با توجه به بازدیدهایی که کارجوها از موقعیتهای کاری میکنند تغییر میکند.
تعدادی موقعیت کار داریم و هر موقعیت کار دارای ویژگیهای «نام موقعیت کار»، «بازهی سنی مورد نیاز این کار»، «وضعیت ساعتکاری (تماموقت / پارهوقت / پروژهای)»، «حقوق پیشنهادی» و «مهارتهای مورد نیاز برای این موقعیت کاری» همچنین هر کارجو ویژگیهای «نام کارجو»، «سن کارجو»، «وضعیت ساعتکاری (تماموقت / پارهوقت / پروژهای)»، «حقوق مورد انتظار کارجو» و «مهارتهای این کارجو» را دارد.
به شما یک لیست از تمام مهارتهای موجود داده میشود و از شما میخواهیم تعدادی کوئری را پیادهسازی کنید:
ADD-JOB
)
در این کوئری از شما خواسته میشود یک موقعیت کاری را به سامانه اضافه کنید. اطلاعاتی که در این کوئری داده میشود شامل نام موقعیت شغلی (<NAME>
)، محدودیت بازهی سنی کارجو (<MINAGE>
و <MAXAGE>
)، شرایط زمانی کار (یکی از سه حالت <FULLTIME|PARTTIME|PROJECT>
) و میزان حقوق ماهانه (<SALARY>
) است.
<NAME>
باید فقط شامل حروف کوچک و بزرگ انگلیسی با طولی بین ۱ تا ۱۰ کاراکتر باشد، در غیر این صورت خطای invalid name
را چاپ کنید.<MINAGE>
و <MAXAGE>
باید بین ۰ تا ۲۰۰ (شامل ابتدا و انتها) باشند. همچنین باید <MINAGE>
از <MAXAGE>
کمتر یا مساوی باشد، در غیر این صورت خطای invalid age interval
را چاپ کنید. دقت کنید لزومی ندارد این مقادیر صحیح باشند.FULLTIME
،PARTTIME
یا PROJECT
باشد (به بزرگی حروف دقت کنید) و در غیر این صورت خطای invalid timetype
را چاپ کنید.invalid salary
را چاپ کنید.job id is <idx>
را چاپ کنید و بهجای <idx>
شمارهی موقعیت کار را قرار دهید. برای شمارهگذاری باید از ۱ شروع کرده و یکی یکی زیاد کنید. فقط به موقعیتهای کاری که به این مرحله میرسند و با موفقیت ثبت میشوند، شماره نسبت دهید.ADD-USER
)
در این کوئری شما باید یک کارجو را به سامانه بیفزایید. اطلاعات کارجو شامل نام (<NAME>
)، سن (<AGE>
)، شرایط زمانی کارجو برای کار (یکی از سه حالت <FULLTIME|PARTTIME|PROJECT>
) و حقوق درخواستی ماهانه (<SALARY>
) به شما داده میشود.
<NAME>
باید فقط شامل حروف کوچک و بزرگ انگلیسی با طولی بین ۱ تا ۱۰ کاراکتر باشد. در غیر این صورت خطای invalid name
را چاپ کنید.<AGE>
باید بین ۰ تا ۲۰۰ (شامل ابتدا و انتها) باشد، در غیر این صورت خطای invalid age
را چاپ کنید. دقت کنید لزومی ندارد این مقدار صحیح باشد.FULLTIME
، PARTTIME
یا PROJECT
باشد (به بزرگی حروف دقت کنید) و در غیر این صورت خطای invalid timetype
را چاپ کنید.invalid salary
را چاپ کنید.user id is <idx>
را چاپ کنید و بهجای <idx>
شمارهی کارجو را قرار دهید. برای شمارهگذاری باید از ۱ شروع کرده و یکی یکی زیاد کنید. فقط به کارجوهایی که به این مرحله میرسند و با موفقیت ثبت میشوند، شماره نسبت دهید.ADD-JOB-SKILL
)
در این کوئری از شما خواسته میشود تا یک مهارت لازم را به یک کار موجود در لیست کارها اضافه نمایید. به موارد زیر توجه کنید:
<JOB-ID>
وجود ندارد، خطای invalid index
را چاپ کنید. تضمین میشود ID دادهشده، عددی صحیح باشد.<SKILL>
در لیست اولیه وجود ندارد، خطای invalid skill
را چاپ کنید.repeated skill
را چاپ کنید.skill added
را چاپ کنید.ADD-USER-SKILL
)
در این کوئری از شما خواسته میشود تا یک مهارت را به مهارتهای کارجویی که از پیش ثبتنام کرده، اضافه نمایید. به موارد زیر توجه کنید:
<USER-ID>
وجود ندارد، خطای invalid index
را چاپ کنید. تضمین میشود ID دادهشده، عددی صحیح باشد.<SKILL>
در لیست اولیه وجود ندارد، خطای invalid skill
را چاپ کنید.repeated skill
را چاپ کنید.skill added
را چاپ کنید.VIEW
)
این دستور یعنی کارجو یک موقعیت کاری را مشاهده کرده است.
<USER-ID>
یا موقعیت کاری با شمارهی <JOB-ID>
وجود نداشت، خطای invalid index
را چاپ کنید. تضمین میشود IDهای دادهشده، اعدادی صحیح باشد.tracked
را چاپ کنید.JOB-STATUS
)
<JOB-ID>
وجود ندارد، خطای invalid index
را چاپ کنید. تضمین میشود ID دادهشده، عددی صحیح باشد.-
، مجموع تعداد view
هایی که این موقعیت کاری داشته و سپس یک -
و برای همهی مهارتهایی که در این موقعیت کاری هست در یک (,)
ابتدا نام مهارت و سپس تعداد view
هایی کارجوها با این مهارت داشتند را به صورت صعودی بر اساس این تعداد چاپ کنید.USER-STATUS
)
در این دستور، باید مهارتها را به ترتیب نشان دهید. دقت کنید ترتیب مهارتها، بر اساس مشاهدات کارجو تغییر میکند.
<USER-ID>
وجود ندارد، خطای invalid index
را چاپ کنید. تضمین میشود ID دادهشده، عددی صحیح باشد.-
و برای همهی مهارتهایی که در این کارجو هست در یک (,)
ابتدا نام مهارت و سپس تعداد view
هایی برای موقعیتهای کاری با این مهارت داشتند را به صورت صعودی بر اساس این تعداد چاپ کنید.GET-JOBLIST
)
در این بخش باید مهارتهای مورد نیاز شغلها را با مهارتهای کارجو مقایسه کرده و طبق تابع داده شده در ادامه، امتیاز آنها را محاسبه کنید. سپس بر اساس امتیاز آنها را مرتب کرده و ۵ موقعیت شغلی برتر را با امتیازشان چاپ کنید.
امتیاز متناسب بودن یک کارجو و موقعیت کار از بخشهای زیر بهدست میآید.
اگر سن کارجو و بازهی سنی مورد نیاز موقعیت کار باشد، امتیاز برابر است با:
اگر مجموعهی مهارتهای کارجو و مجموعهی مهارتهای مورد نیاز موقعیت کار باشد، امتیاز برابر است با:
از روی این جدول امتیاز را تشخیص دهید:
. | FULLTIME |
PARTTIME |
PROJECT |
---|---|---|---|
FULLTIME |
۱۰ | ۵ | ۴ |
PARTTIME |
۵ | ۱۰ | ۵ |
PROJECT |
۴ | ۵ | ۱۰ |
اگر حقوق مورد انتظار کارجو و حقوق پیشنهادی موقعیت کار باشد، امتیاز این قسمت برابر است با:
اگر مجموع امتیازها چهار عدد قبل برابر شود، امتیاز هر کاربر بهعلاوهی شمارهی موقعیت کاری است.
<>
یک رشته به طول حداقل ۱ و حداکثر ۱۰ از کاراکترهای رقم، حروف بزرگ و کوچک و .
است. زیرمسئله | نمره | محدودیت |
---|---|---|
۱ | ۱۰۰ | فاز اول |
۲ | ۱۰۰ | فاز دوم |
۲ | ۱۰۰ | فاز سوم |
در سطر اول ورودی، عدد صحیح و مثبت آمده است که تعداد مهارتها را نشان میدهد.
در سطر دوم ورودی، یک لیست شامل رشته متمایز که با یک فاصله از هم جدا شدهاند آمده است که لیست مهارتها را نشان میدهد. در سطر سوم ورودی، عدد صحیح و مثبت آمده که تعداد درخواستهایی را که باید پوشش دهید، نشان میدهد.
در سطر بعدی در هر سطر یک درخواست از انواعی که در صورت سوال آمده به شما داده میشود و شما باید کارهای مربوط به آن را انجام دهید.
باید در هر سطر از خروجی، پیامهایی که توسط دستورها میآید را چاپ کنید.
Amin
» با شمارهی ۱ اضافه میشود.Hamed
» نمیتواند اضافه شود چون باید سه رقم سمت راست حقوقش ۰ باشد.Quera
» با شمارهی ۱ اضافه میشود.YEK.NET
» حاوی کاراکتر .
است که برای نام قابل قبول نیست.YEKtaNET
» با شمارهی ۲ اضافه میشود. ESHGHI
» وجود ندارد.Amin
» با شمارهی ۲ اضافه میشود. (نام تکراری مشکلی نیست.)talking
» به شرکت شمارهی ۲ یعنی «YEKtaNET
» اضافه شد.codeing
» به کارجوی شمارهی ۲ اضافه شد.talking
» به کارجوی شمارهی ۱ اضافه شد.Amin
» با شمارهی ۱ اضافه میشود.Hamed
» با شمارهی ۲ اضافه میشود.Quera
» با شمارهی ۱ اضافه میشود.YEKtaNET
» با شمارهی ۲ اضافه میشود. Amin
» با شمارهی ۳ اضافه میشود.talking
» به موقعیت کاری شمارهی ۲ اضافه میشود.codeing
» به کارجوی شمارهی ۲ اضافه میشود.talking
» به کارجوی شمارهی ۱ اضافه میشود.Quera
» هیچ مشاهدهای ندارد، پس ۰ چاپ میشود و چون هیچ مهارتی ندارد خالی است.YEKtaNET
» هیچ مشاهدهای ندارد، پس ۰ چاپ میشود و چون هیچ کارجویی با مهارت «talking
» این موقعیت کاری را ندیده، جلوی آن صفر چاپ میشود.Amin
» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته میشود.Hamed
» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته میشود.Amin
» مهارتی ندارد.Quera
» مجموعاً ۴ بار دیده شده است.YEKtaNET
» یکبار دیده شده و یک نفر مهارت «talking
» را داشته است.Amin
» و یک موقعیت کاری با مهارت آن دیده شده است.Hamed
» در هیچ موقعیت کاری دیده نشده پس جلوی آن صفر نوشته میشود.Amin
» مهارتی ندارد.