سلام دوست عزیز😃👋
به آزمون ورودی کارآموزی تابستانه Software Engineering کداستار خوش آمدید!
مسابقه به مدت ۶ ساعت ادامه خواهد داشت و در مجموع شامل ۵ سوال است که سطح آنها از آسان به سخت متفاوت خواهد بود به طوری که ۳ سوال اول الگوریتمی هستند و ۲ سوال آخر پیادهسازی میباشند. برای حل سوالات الگوریتمی میتوانید از زبانهای C++، Java و Python استفاده کنید اما سوالات پیادهسازی را فقط میتوانید با Java یا Python حل کنید.
سوالات به گونهای تنظیم شدهاند که با توجه به دانشی که دارید بتوانید بخشی از نمرۀ سوال را بگیرید. به عنوان مثال اگر نتوانید سوال ۳ را به طور کامل حل کنید، این امکان وجود دارد که بتوانید بخشی از سوال ۴ را حل کنید؛ بنابراین حتما به تمام سوالات مراجعه کنید.
رتبهبندی بر اساس مجموع امتیازاتی که از سوالات کسب میکنید صورت میگیرد؛ همچنین در صورتی که امتیاز دو نفر یکسان شود، کسی که سوالات را در مدتزمان کمتری حل کرده باشد، رتبۀ بهتری کسب میکند.
در صورتی که درمورد سوالی ابهام داشتید، میتوانید از قسمت «سوال بپرسید» آن را مطرح کنید.
برای کسب اطلاعات بیشتر به لینکهای زیر مراجعه کنید:
+ [آموزش کار با Quera](https://quera.org/course/assignments/2693/problems/8772)
+ [سایت کداستار](https://code-star.ir/)
+ [کانال تلگرام کداستار](https://t.me/code_star)
موفق باشید 😉✌
سلام دوست عزیز😃👋
به آزمون ورودی کارآموزی تابستانه 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 |
# پروژه اولیه
پروژه اولیه را از [این لینک](https://quera.org/contest/assignments/41562/download_problem_initial_project/139999) دانلود کنید.
<details class="blue">
<summary>ساختار فایلها</summary>
```
GunProblemExample.zip
├── Shooter.java
└── ShootingContract.java
```
</details>
# خواستههای مسئله
با توجه به انواع سلاحها و گلولهها یک کلاس ایجاد کنید که `Interface` زیر را پیادهسازی کند:
```java
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;
}
```
در بالا، به ترتیب سه متد **انتخاب سلاح**، **اضافهکردن گلوله** و **شلیک به هدف** تعریف شدهاند که به توضیح آنها میپردازیم:
+ متد **انتخاب سلاح** با توجه به ورودی، یک سلاح را انتخاب میکند تا در ادامه از آن استفاده شود.
+ در صورتی که سلاحی با نام داده شده وجود نداشته باشد، باید یک `Exception` پرتاب شود.
+ این متد باید به حرف کوچک و بزرگ حساس باشد؛ به عنوان مثال سلاحی با نام `submachine gun` نداریم.
+ متد **انتخاب گلوله**، گلولههایی را با اندازه و تعداد دادهشده به سلاح اضافه میکند.
+ در صورتی که هر کدام از موارد زیر رخ دهد، باید یک `Exception` پرتاب شود:
+ سلاحی انتخاب نشده باشد.
+ گلوله با اسلحه همخوانی نداشته باشد.
+ تعداد منفی باشد.
+ گلولهای با اندازۀ دادهشده وجود نداشته باشد.
+ متد **شلیک به هدف**، پارامترهای مختصات هدف، فاصله تا آن و مختصات نقطهای که سلاح به آن اشاره میکند را از ورودی دریافت میکند و در خروجی، با استفاده از فرمولی که در ادامه میآید، میزان آسیبی که به هدف میرسد را برمیگرداند.
+ هدف، یک مربع به ضلع ۱۰ است.
+ مختصات گوشۀ پایین-چپ مربع در ورودی داده میشود.
+ برای محاسبۀ خروجی، به صورت زیر عمل میکنیم:
+ اگر مختصات نقطهای که سلاح به آن اشاره میکند خارج از ابعاد هدف باشد، عدد ۰ برگردانده شود.
+ اگر برد سلاح از فاصله کمتر باشد، عدد ۰ برگردانده شود.
+ در غیر این صورت، حاصلضرب قدرت اسلحه در آسیب گلوله برگردانده شود.
+ در صورتی که سلاحی انتخاب نشده باشد یا گلولهای نداشته باشد، باید یک `Exception` پرتاب شود.
# مثال
```java
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);
}
```
# نکات
- شما تنها مجاز به تغییر در فایل `Shooter.java` هستید. تغییرات در باقی فایلها نادیده گرفته میشود.
- توجه کنید که تمیزی کد مهم و در رتبهبندی نهایی تاثیرگذار است.
- برای ثبت پاسخ، پروژه را با ساختار زیر ارسال کنید.
```
[your-zip-file-name].zip
└── Shooter.java
```
پیادهسازی - تفنگبازی (جاوا)
- محدودیت زمان جاوا: ۲ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
یک بازی تیراندازی اولشخص را تصور کنید؛ در این بازی انواع سلاح وجود دارد و هر سلاح نام، برد، قدرت و اندازۀ گلولۀ منحصربهفردی دارد. از طرفی گلولهها نیز اندازه و آسیب منحصربهفردی دارند که در ادامه آمده است.
سلاحها🔗
نام |
برد |
قدرت |
اندازۀ گلوله |
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 |
پروژه اولیه🔗
پروژه اولیه را از این لینک دانلود کنید.
ساختار فایلها
خواستههای مسئله🔗
با توجه به انواع سلاحها و گلولهها یک کلاس ایجاد کنید که Interface
زیر را پیادهسازی کند:
در بالا، به ترتیب سه متد انتخاب سلاح، اضافهکردن گلوله و شلیک به هدف تعریف شدهاند که به توضیح آنها میپردازیم:
متد انتخاب سلاح با توجه به ورودی، یک سلاح را انتخاب میکند تا در ادامه از آن استفاده شود.
- در صورتی که سلاحی با نام داده شده وجود نداشته باشد، باید یک
Exception
پرتاب شود.
- این متد باید به حرف کوچک و بزرگ حساس باشد؛ به عنوان مثال سلاحی با نام
submachine gun
نداریم.
متد انتخاب گلوله، گلولههایی را با اندازه و تعداد دادهشده به سلاح اضافه میکند.
- در صورتی که هر کدام از موارد زیر رخ دهد، باید یک
Exception
پرتاب شود:
- سلاحی انتخاب نشده باشد.
- گلوله با اسلحه همخوانی نداشته باشد.
- تعداد منفی باشد.
- گلولهای با اندازۀ دادهشده وجود نداشته باشد.
متد شلیک به هدف، پارامترهای مختصات هدف، فاصله تا آن و مختصات نقطهای که سلاح به آن اشاره میکند را از ورودی دریافت میکند و در خروجی، با استفاده از فرمولی که در ادامه میآید، میزان آسیبی که به هدف میرسد را برمیگرداند.
- هدف، یک مربع به ضلع ۱۰ است.
- مختصات گوشۀ پایین-چپ مربع در ورودی داده میشود.
- برای محاسبۀ خروجی، به صورت زیر عمل میکنیم:
- اگر مختصات نقطهای که سلاح به آن اشاره میکند خارج از ابعاد هدف باشد، عدد ۰ برگردانده شود.
- اگر برد سلاح از فاصله کمتر باشد، عدد ۰ برگردانده شود.
- در غیر این صورت، حاصلضرب قدرت اسلحه در آسیب گلوله برگردانده شود.
- در صورتی که سلاحی انتخاب نشده باشد یا گلولهای نداشته باشد، باید یک
Exception
پرتاب شود.
مثال🔗
نکات🔗
- شما تنها مجاز به تغییر در فایل
Shooter.java
هستید. تغییرات در باقی فایلها نادیده گرفته میشود.
- توجه کنید که تمیزی کد مهم و در رتبهبندی نهایی تاثیرگذار است.
- برای ثبت پاسخ، پروژه را با ساختار زیر ارسال کنید.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.