Skip to content

Commit b3fdb84

Browse files
committed
Add solution of GettingCloserToTheTarget task
1 parent a2a8ba3 commit b3fdb84

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package by.andd3dfx.numeric;
2+
3+
import lombok.Builder;
4+
5+
/**
6+
* <pre>
7+
* <a href="https://w.acmp.ru/?main=task&id_task=492">Task description</a>
8+
*
9+
* Вы являетесь одним из разработчиков программного обеспечения боевой информационной системы для ракетного крейсера
10+
* нового поколения РК-2000. Один из компонентов этой системы отвечает за решение задач тактического маневрирования.
11+
* В настоящее время вы занимаетесь решением задачи о сближении с целью.
12+
*
13+
* Заданы координаты x0 и y0 цели в начальный момент времени, а также вектор (Vx; Vy) ее скорости. Считается, что
14+
* цель движется равномерно и прямолинейно. В начальный момент времени РК-2000 находится в начале координат.
15+
* Его максимальная скорость равна V.
16+
*
17+
* Необходимо выяснить, может ли РК-2000 через заданное время t оказаться ровно на заданном расстоянии d от цели.
18+
* Для простоты считайте, что РК-2000 может мгновенно изменять свою скорость.
19+
* </pre>
20+
*/
21+
public class GettingCloserToTheTarget {
22+
23+
public static boolean isPossibleToReachTheTarget(Condition condition) {
24+
var x0 = condition.x0;
25+
var y0 = condition.y0;
26+
var vx = condition.vx;
27+
var vy = condition.vy;
28+
var vRocket = condition.vRocket;
29+
var t = condition.t;
30+
var distance = condition.distance;
31+
return Math.pow(vRocket * t + distance, 2) >= Math.pow(x0 + vx * t, 2) + Math.pow(y0 + vy * t, 2);
32+
}
33+
34+
@Builder
35+
public static class Condition {
36+
37+
double x0;
38+
double y0;
39+
double vx;
40+
double vy;
41+
double vRocket;
42+
double t;
43+
double distance;
44+
}
45+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package by.andd3dfx.numeric;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import by.andd3dfx.numeric.GettingCloserToTheTarget.Condition;
6+
import org.junit.Test;
7+
8+
public class GettingCloserToTheTargetTest {
9+
10+
@Test
11+
public void isPossibleToReachTheTarget() {
12+
Condition condition = Condition.builder()
13+
.x0(1)
14+
.y0(1)
15+
.vx(-0.5)
16+
.vy(0.5)
17+
.vRocket(0.6)
18+
.t(10)
19+
.distance(1)
20+
.build();
21+
assertThat(GettingCloserToTheTarget.isPossibleToReachTheTarget(condition)).isFalse();
22+
23+
Condition condition2 = Condition.builder()
24+
.x0(1)
25+
.y0(1)
26+
.vx(-0.5)
27+
.vy(0.5)
28+
.vRocket(0.65)
29+
.t(10)
30+
.distance(1)
31+
.build();
32+
assertThat(GettingCloserToTheTarget.isPossibleToReachTheTarget(condition2)).isTrue();
33+
}
34+
}

0 commit comments

Comments
 (0)