Skip to content

Commit 0a6278f

Browse files
authored
ye also shall bear witness
And ye also shall bear witness, because ye have been with me from the beginning. (John 15:27)
1 parent 9c1e32d commit 0a6278f

1 file changed

Lines changed: 112 additions & 0 deletions

File tree

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
2+
//And ye also shall bear witness, because ye have been with me from the beginning. (John 15:27)
3+
4+
package com.javarush.task.task29.task2910;
5+
6+
import java.math.BigDecimal;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import static com.javarush.task.task29.task2910.Constants.*;
11+
12+
public class Game {
13+
private List<Sportsman> members;
14+
Sportsman controlSportsman;
15+
16+
public Game() {
17+
initializeControlSportsman();
18+
members = new ArrayList<>();
19+
for (int i = 0; i < SPORTSMAN_COUNT; i++) {
20+
members.add(new Sportsman(i + 1));
21+
}
22+
}
23+
24+
private void initializeControlSportsman() {
25+
controlSportsman = new Sportsman(0);
26+
controlSportsman.setAverageSpeed(new BigDecimal(20.));
27+
controlSportsman.setChanceToHit(MAX_CHANCE_TO_HIT_IN_TARGET);
28+
controlSportsman.setCountHitOutTarget(2);
29+
controlSportsman.setResultTime(new BigDecimal("3640.00"));
30+
System.out.println("РЕЗУЛЬТАТ КОНТРОЛЬНО СПОРТСМЕНА:");
31+
controlSportsman.printResultInfo();
32+
}
33+
34+
public void startCompetition() {
35+
for (int i = 0; i < members.size(); i++) {
36+
members.get(i).calculateNumberOfMiss();
37+
BigDecimal timeToRace = controlSportsman.getResultTime().subtract(BigDecimal.valueOf(members.get(i).getCountHitOutTarget() * PENALTY_TIME_PER_ONE_MISS));
38+
members.get(i).setAverageSpeed(new BigDecimal(RACE_LENGTH / (timeToRace.doubleValue() / 3600)).setScale(4, BigDecimal.ROUND_HALF_UP));
39+
members.get(i).calculateFullTime();
40+
}
41+
}
42+
43+
public void printAllResults() {
44+
for (int i = 0; i < members.size(); i++) {
45+
members.get(i).printResultInfo();
46+
}
47+
}
48+
49+
public void printSportsmanWithEqualTime() {
50+
for (Sportsman sportsman : getSportsmanWithEqualTime()) {
51+
sportsman.printResultInfo();
52+
}
53+
}
54+
55+
private List<Sportsman> getSportsmanWithEqualTime() {
56+
List<Sportsman> result = new ArrayList<>();
57+
for (int i = 0; i < members.size(); i++) {
58+
if (members.get(i).getResultTime().equals(controlSportsman.getResultTime())) {
59+
result.add((members.get(i)));
60+
}
61+
}
62+
return result;
63+
}
64+
}
65+
66+
/*
67+
Это архаичное слово "Биатлон"
68+
69+
Амиго, представляешь, в 21 веке существовал такой вид спорта – биатлон. Люди ездили на лыжах и стреляли на подготовленных площадках по мишеням. За одну серию стрельбы нужно было закрыть 5 мишеней. Стрельбы происходили как стоя, так и лежа, но не будем вдаваться в подробности. У лучших представителей рода человеческого средняя точность стрельбы достигала 90%, у крепких середнячков – 81,5%.
70+
71+
Я написал программу, которая создает соревнование, добавляет в него 30 спортсменов-биатлонистов. Каждому из них случайным образом выставляется точность (в диапазоне от 0,815 до 0,900). Штраф за каждый промах – плюс 20 секунд к результату. Еще у соревнования задается количество огневых рубежей – 4 и дистанция, которую биатлонисты должны преодолеть – 20 км.
72+
73+
74+
75+
Так же я создал контрольного спортсмена, у которого захардкожены показатели:
76+
77+
Скорость: 20 км/час;
78+
79+
Вероятность попадания: 0,900 (90%);
80+
81+
Количество промахов: 2 (Всего нужно попасть 20 раз. При точности 90 процентов ожидается 2 промаха);
82+
83+
Нужно проехать 20 км со скоростью 20 км/час. Необходимое время - 1 час, то есть 3600 секунд.
84+
85+
Время гонки (с учетом штрафных секунд): 3600 + 2 * 20 = 3640 секунд.
86+
87+
Я хочу определить, с какой скоростью должен ехать каждый спортсмен, при его случайном количестве промахов, чтобы результат в секундах был такой же, как и у контрольного спортсмена. В начале я вывожу результат контрольного спортсмена, потом все результаты. В конце я вывожу всех спортсменов, у которых время такое же, как и у контрольного спортсмена. У некоторых спортсменов за счет округления итоговое время отличается на доли секунды. Такие нам не нужны. У остальных время гонки ровно 3640 секунд, как и у контрольного спортсмена, но они не выводятся в секции "СПОРТСМЕНЫ С ТАКИМ ЖЕ ИТОГОВЫМ ВРЕМЕНЕМ, КАК У КОНТРОЛЬНОГО СПОРТСМЕНА:".
88+
89+
90+
91+
Твоя задача: сделать одно изменение в коде, чтобы исправить найденный баг.
92+
93+
Обрати внимание: все округления правильные, и новых добавлять не нужно!
94+
95+
96+
97+
98+
99+
Требования:
100+
101+
1. Запрещено изменять типы данных констант.
102+
103+
2. Вывод на экран в секции "СПОРТСМЕНЫ С ТАКИМ ЖЕ ИТОГОВЫМ ВРЕМЕНЕМ, КАК У КОНТРОЛЬНОГО СПОРТСМЕНА:" должен содержать всех спортсменов, у которых такое же время, как и у контрольного спортсмена.
104+
105+
3. Сделай одно изменение в классе Game.
106+
107+
4. Класс Constants не изменяй.
108+
109+
5. Класс Solution не изменяй.
110+
111+
6. Класс Sportsman не изменяй.
112+
*/

0 commit comments

Comments
 (0)