لینک‌های مفید برای شرکت در مسابقه:

برای تست کردن برنامه‌هایتان نیازی به استفاده از کامپایلرهای جدید نیست و می‌توانید با ثبت‌نام رایگان در این‌جا، از ویرایشگر سمت چپ این تمرین برای اجرای کدهایتان استفاده کنید.

در صورت بروز مشکل آن را از طریق قسمت "سوال بپرسید" مطرح کنید. زبان‌های سوالات را می‌توانید در کنار اسم آن‌ها مشاهده کنید.

سری سوم و آخر سوالات ساعت ۱۷:۰۵ دوشنبه قرار می‌گیرد،

پشتیبانی مسابقه از ساعت ۱۶ الی ۱۹ و ۱۱ الی ۱۴ هر روز است.

ایزی لیگ - Python / Java


  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

علی به تازگی با برنامه نویسی آشنا شده است و برای همین ذوق خاصی دارد. از این رو می‌خواهد سیستمی طراحی کند که یک لیگ فوتبال را شبیه سازی می‌کند.

در این سیستم، دستورات مختلفی وجود دارند که به شرح زیر می‌باشند:

ساختن بازیکن جدید🔗

new player name price speed finishing defence
Plain text

این دستور، بازیکنی با نام name، قیمت price، سرعت speed، قدرت تمام‌کنندگی finishing و دفاع defence می‌سازد.

توجه کنید که name از جنس رشته، و باقی پارامتر‌ها از جنس عدد می‌باشند.

هر بازیکن، یک شناسه‌ی عددی دارد که با استفاده از آن می‌توان به آن بازیکن دسترسی داشت، اولین بازیکنی که ساخته می‌شود شناسه‌ی عددی ۱، دومین بازیکنی که ساخته می‌شود شناسه‌ی عددی ۲ و ii-امین بازیکنی که ساخته می‌شود شناسه‌ی عددی ii دارد.

ساختن تیم جدید🔗

new team name money
Plain text

با استفاده از این دستور، می‌توانید یک تیم جدید با نام name و پول money بسازید. در صورتی که از قبل تیمی با اسم name وجود داشته باشد، تیم جدیدی ساخته نمی‌شود.

همچنین name از جنس رشته و money از جنس عدد می‌باشد.

هر تیم، یک شناسه‌ی عددی دارد که با استفاده از آن می‌توان به آن تیم دسترسی داشت، اولین تیمی که ساخته می‌شود شناسه‌ی عددی ۱، دومین تیمی که ساخته می‌شود شناسه‌ی عددی ۲ و ii-امین تیمی که ساخته می‌شود شناسه‌ی عددی ii دارد.

خرید بازیکن توسط تیم🔗

buy playerID teamID
Plain text

با استفاده از این دستور، تیم با شناسه‌ی عددی teamID بازیکن با شناسه‌ی عددی playerID را می‌خرد.

همچنین همانطور که در بالا گفته شد، هر بازیکن یک قیمت (price) دارد و هر تیمی مقداری پول money دارد و هنگام خرید یک بازیکن باید تیم مورد نظر پول کافی را برای خرید بازیکن داشته باشد و در صورتی که خرید موفقیت آمیز باشد، از پول تیم، به میزان قیمت بازیکن مورد نظر کم می‌شود.

توجه کنید که در امر خرید بازیکن ممکن هست حالت‌های مختلفی پیش بیاید:

  • در صورتی که بازیکنی با شناسه‌ی عددی playerID وجود نداشته باشد، باید عبارت player with the id playerID doesnt exist را چاپ کنید.
  • در صورتی که تیمی با شناسه‌ی عددی teamID وجود نداشته باشد، باید عبارت team with the id teamID doesnt exist را چاپ کنید.
  • در صورتی که تیم مورد نظر، پول کافی برای خرید بازیکن را نداشته باشد باید عبارت the team cant afford to buy this player را چاپ کنید.
  • در صورتی که بازیکن مورد نظر، در تیمی عضو باشد، باید عبارت player already has a team را چاپ کنید.

در صورتی که هیچکدام از حالت های بالا پیش نیایند، با موفقیت بازیکن مورد نظر خریداری می‌شود و باید عبارت player added to the team succesfully را چاپ کنید.

توجه کنید که ممکن است چندین مورد از حالت‌های بالا پیش بیایند، در این صورت شما باید اولین حالتی که پیش می‌آید را در نظر گرفته و خروجی مورد نظر را چاپ کنید و از بقیه حالت‌ها صرف نظر کنید.

فروش بازیکن🔗

sell playerID teamID
Plain text

برای فروش بازیکن می‌توان از دستور بالا استفاده کرد. با استفاده از این دستور، تیم با شناسه‌ی عددی teamID بازیکن با شناسه‌ی عددی playerID را به فروش می‌رساند.

همچنین موقع فروش بازیکن ممکن است حالت‌های مختلفی پیش بیایند:

  • در صورتی که تیمی با شناسه‌ی عددی teamID وجود نداشته باشد، باید عبارت team doesnt exist را چاپ کنید.
  • در صورتی که تیم مورد نظر وجود داشته باشد اما بازیکنی با شناسه‌ی عددی playerID در آن تیم وجود نداشته باشد، باید عبارت team doesnt have this player را چاپ کنید.

در صورتی که حالت‌های بالا پیش نیایند، یعنی با موفقیت بازیکن مورد نظر فروخته شده است و این بازیکن دیگر به تیمی تعلق ندارد (ممکن است در آینده توسط تیمی خریداری شود). در این حالت به اندازه‌ی قیمت بازیکن فروخته شده، به پول‌ تیم مورد نظر افزوده می‌شود. همچنین در این حالت باید عبارت player sold succesfully را چاپ کنید.

انجام بازی بین دو تیم🔗

match teamID1 teamID2
Plain text

با استفاده از این دستور، دو تیم با شناسه‌های عددی teamID1 و teamID2 با یکدیگر بازی می‌کنند.

همچنین ممکن است در اجرای این دستور، حالت‌های مختلفی پیش بیاید:

  • اگر حداقل یکی از دو تیم وجود نداشته‌ باشد، باید عبارت team doesnt exist را چاپ کنید.
  • اگر دو تیم مورد نظر وجود داشتند، اما حداقل یکی از آن‌ها تعداد بازیکن‌هایش کمتر از ۱۱ نفر باشد، بازی انجام نمی‌شود و باید عبارت the game can not be held due to loss of the players را چاپ کنید.

در صورتی‌که هیچکدام از مشکلات بالا پیش نیاید، بازی با موفقیت انجام می‌شود.

در ابتدا برای توصیف روند بازی، نیاز به تعریف پارامتر قدرت برای هر تیم داریم.

قدرت تیم اول (تیم با شناسه‌ی عددی teamID1) برابر است با مجموع سرعت و تمام‌کنندگی ۱۱ بازیکن اول آن تیم.

همچنین قدرت تیم دوم (تیم با شناسه‌ی عددی teamID2) برابر است با مجموع سرعت و دفاع ۱۱ بازیکن اول آن تیم.

توجه کنید که ترتیب بازیکن‌ها در یک تیم، همان ترتیب زمانی اضافه شدن آن‌ها به تیم می‌باشد.

در صورتی که قدرت دو تیم باهم برابر نباشد، تیمی برنده‌ی بازی می‌شود که قدرت بیشتری دارد و به تعداد بردهای تیم برنده یک واحد اضافه می‌شود و به تعداد باخت‌های تیم بازنده نیز یک واحد اضافه می‌شود و به تیم برنده، به عنوان جایزه ۱۰۰۰ واحد پول داده می‌شود. در صورتی که قدرت دو تیم برابر باشد، بازی مساوی می‌شود و تعداد مساوی‌های هر دو تیم یک واحد افزایش پیدا می‌کند.

نمایش جدول تیم‌ها🔗

rank
Plain text

با استفاده از دستور بالا، باید جدول رتبه‌بندی تیم‌ها را چاپ کنید.

شما باید تیم‌ها را بر اساس تعداد بردها (هر تیمی که برد بیشتری داشته باشد رتبه بهتری دارد)، و در صورت برابری تعداد بردها، بر اساس تعداد باخت‌های کمتر مرتب کنید‌ (اگر دو تیم بردهای برابری داشته باشند، تیم با باخت کمتر رتبه بهتری می‌گیرد) و به صورت زیر نام آن‌ها را چاپ کنید:

1. teamName[0]
2. teamName[1]
...
Plain text

که در آن teamName[0] تیم با رتبه‌ی ۱، teamName[1] تیم با رتبه‌ی ۲ و... می‌باشند.

توجه کنید که تعداد مساوی‌ها مهم نمی‌باشد و همچنین اگر دو تیم تعداد باخت‌ها و بردهایشان برابر بود، تیمی که شناسه‌ی عددی کمتری دارد رتبه‌ی بهتری می‌گیرد.

پایان لیگ🔗

end
Plain text

در انتها، پس از تمام شدن لیگ، عبارت بالا در خروجی داده می‌شود و به این معنی است که ورودی‌ها تمام شده است و برنامه شما نیز پایان می‌یابد.

ورودی🔗

ورودی شامل چندین خط می‌باشد که در هر خط یکی از دستوراتی که در صورت سوال گفته شد، داده می‌شود.

همچنین در خط آخر ورودی، دستور end داده می‌شود.

توجه کنید که ممکن است در ورودی داده شده، بعضی از خط ها خالی باشند و هیچ دستوری در آن‌ها نباشد.

خروجی🔗

پس از اجرای برخی از دستورها، باید خروجی‌هایی را چاپ کنید که در توضیحات هر دستور در صورت نیاز گفته شده است. توجه کنید که هر خروجی باید در یک خط چاپ شود و از چاپ تمامی خروجی‌ها در یک خط پرهیز کنید.

مثال🔗

ورودی نمونه ۱🔗

new player ArshiA 1 2 3 4
new player sadegh 1 2 3 4
new player haniye 1 2 3 4
new player fateme 1 2 3 4
new player qorban 1 2 3 4
new player abbasi 1 2 3 4
new player alikmr 1 2 3 4
new player sadegh 1 2 3 4
new player hamide 1 2 3 4
new player karane 1 2 3 4
new player vanaki 1 2 3 4

new player Ars 1 100 100 100
new player sad 1 100 100 100
new player han 1 100 100 100
new player fat 1 100 100 100
new player qor 1 100 100 100
new player abb 1 100 100 100
new player ali 1 100 100 100
new player sad 1 100 100 100
new player ham 1 100 100 100
new player kar 1 100 100 100
new player van 1 100 100 100

new team t2 100
new team t1 100
buy 12 1
buy 13 1
buy 14 1
buy 15 1
buy 16 1
buy 17 1
buy 18 1
buy 19 1
buy 20 1
buy 21 1
buy 22 1

buy 1 2
buy 2 2
buy 3 2
buy 4 2
buy 5 2
buy 6 2
buy 7 2
buy 8 2
buy 9 2
buy 10 2
buy 11 2
match 1 2
rank
end
Plain text

خروجی نمونه ۱🔗

player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
1. t2
2. t1
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.