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

به آزمون ورودی کارآموزی تابستانه 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

پروژه اولیه🔗

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

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

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

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

public interface ShootingContract {
    void setGunByName(String name) throws Exception;

    void addBulletOfGivenSizeToGun(float size, int count) throws Exception;

    float shootToTarget(int targetX, int targetY, int targetDistance, int aimX, int aimY) throws Exception;
}
Java

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

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

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

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

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

مثال🔗

public void caseA() {
    ShootingContract implementation = new Shooter();
    implementation.setGunByName("Submachine Gun");
    implementation.addBulletOfGivenSizeToGun(0.5f, 5);
    var damage = implementation.shootToTarget(0, 0, 20, 5, 5);
}
Java

نکات🔗

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