سلام دوست عزیز😃👋

به آزمون ورودی کارآموزی تابستانه Software Engineering کداستار خوش آمدید!

مسابقه به مدت ۶ ساعت ادامه خواهد داشت و در مجموع شامل ۵ سوال است که سطح آن‌ها از آسان به سخت متفاوت خواهد بود به طوری که ۳ سوال اول الگوریتمی هستند و ۲ سوال آخر پیاده‌سازی می‌باشند. برای حل سوالات الگوریتمی می‌توانید از زبان‌های C++، Java و Python استفاده کنید اما سوالات پیاده‌سازی را فقط می‌توانید با Java یا Python حل کنید.

سوالات به گونه‌ای تنظیم شده‌اند که با توجه به دانشی که دارید بتوانید بخشی از نمرۀ سوال را بگیرید. به عنوان مثال اگر نتوانید سوال ۳ را به طور کامل حل کنید، این امکان وجود دارد که بتوانید بخشی از سوال ۴ را حل کنید؛ بنابراین حتما به تمام سوالات مراجعه کنید.

رتبه‌بندی بر اساس مجموع امتیازاتی که از سوالات کسب می‌کنید صورت می‌گیرد؛ همچنین در صورتی که امتیاز دو نفر یکسان شود، کسی که سوالات را در مدت‌زمان کمتری حل کرده باشد، رتبۀ بهتری کسب می‌کند.

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

برای کسب اطلاعات بیشتر به لینک‌های زیر مراجعه کنید:

موفق باشید 😉✌

پیاده‌سازی - تفنگ‌بازی (پایتون)


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

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

سلاح‌ها🔗

نام برد قدرت اندازۀ گلوله
Submachine Gun 100 10 0.5
Assault Rifle 200 20 1
Pistol 80 8 0.5
Shotgun 50 40 4
Sniper Rifle 1000 30 3

گلوله‌ها🔗

نام اندازه آسیب
A 0.5 1
B 1 1.5
C 3 3
D 4 2

پروژه اولیه🔗

پروژه اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
GunProblemSample.zip
├── Shooter.py
└── ShootingContract.py
Plain text

خواسته‌های مسئله🔗

با توجه به انواع سلاح‌ها و گلوله‌ها کلاس زیر را پیاده‌سازی کند:

class Shooter:

    def set_gun_by_name(self, name: str) -> None:

        pass

    def add_bullet_of_given_size_to_gun(self, size: float, count: int) -> None:

        pass

    def shoot_to_target(self, target_x: int,  target_y: int,  target_distance: int,  aim_x: int,  aim_y: int) -> float:

        pass
Python

در بالا، به ترتیب سه متد انتخاب سلاح، اضافه‌کردن گلوله و شلیک به هدف تعریف شده‌اند که به توضیح آن‌ها می‌پردازیم:

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

    • در صورتی که سلاحی با نام داده شده وجود نداشته باشد، باید یک Exception پرتاب شود.
    • این متد باید به حرف کوچک و بزرگ حساس باشد؛ به عنوان مثال سلاحی با نام submachine gun نداریم.
  • متد انتخاب گلوله، گلوله‌هایی را با اندازه و تعداد داده‌شده به سلاح اضافه می‌کند.

    • در صورتی که هر کدام از موارد زیر رخ دهد، باید یک Exception پرتاب شود:
      • سلاحی انتخاب نشده باشد.
      • گلوله با اسلحه هم‌خوانی نداشته باشد.
      • تعداد منفی باشد.
      • گلوله‌ای با اندازۀ داده‌شده وجود نداشته باشد.
  • متد شلیک به هدف، پارامترهای مختصات هدف، فاصله تا آن و مختصات نقطه‌ای که سلاح به آن اشاره می‌کند را از ورودی دریافت می‌کند و در خروجی، با استفاده از فرمولی که در ادامه می‌آید، میزان آسیبی که به هدف می‌رسد را برمی‌گرداند.

    • هدف، یک مربع به ضلع ۱۰ است.
    • مختصات گوشۀ پایین-چپ مربع در ورودی داده می‌شود.
    • برای محاسبۀ خروجی، به صورت زیر عمل می‌کنیم:
      • اگر برد سلاح از فاصله کمتر باشد، عدد ۰ برگردانده شود.
      • در غیر این صورت، حاصل‌ضرب قدرت اسلحه در آسیب گلوله برگردانده شود.
    • در صورتی که سلاحی انتخاب نشده باشد یا گلوله‌ای نداشته باشد، باید یک Exception پرتاب شود.

مثال🔗

shooter = Shooter()
shooter.set_gun_by_name('Submachine Gun')
shooter.add_bullet_of_given_size_to_gun(0.5, 1)
result = shooter.shoot_to_target(1, 1, 20, 5, 4)
# result should be 10
Python

نکات🔗

  • شما تنها مجاز به تغییر در فایل Shooter.py هستید. تغییرات در باقی فایل‌ها نادیده گرفته می‌شود.
  • توجه کنید که تمیزی کد مهم و در رتبه‌بندی نهایی تاثیرگذار است.
  • برای ثبت پاسخ، پروژه را با ساختار زیر ارسال کنید.
[your-zip-file-name].zip
└── Shooter.py
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.