Skip to content

Commit 1ef5844

Browse files
committed
feat: start yandex_training 1.0
1 parent 8262ac2 commit 1ef5844

File tree

4 files changed

+148
-1
lines changed

4 files changed

+148
-1
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,12 @@
353353
## Яндекс тренировки 1.0
354354
<a name="yandex_train_1"></a>
355355

356-
В процессе...
356+
<details>
357+
<summary>Лекция 1: «Сложность, тестирование, особые случаи»</summary>
358+
359+
- [X] [A. Кондиционер](yandex_training_1/study_1/A)
360+
361+
</details>
357362

358363
<br>
359364

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# A. Кондиционер
2+
3+
В офисе, где работает программист Петр, установили кондиционер нового типа. Этот кондиционер отличается особой простотой в управлении. У кондиционера есть всего лишь два управляемых параметра: желаемая температура и режим работы.
4+
5+
Кондиционер может работать в следующих четырех режимах:
6+
7+
«freeze» — охлаждение. В этом режиме кондиционер может только уменьшать температуру. Если температура в комнате и так не больше желаемой, то он выключается.
8+
9+
«heat» — нагрев. В этом режиме кондиционер может только увеличивать температуру. Если температура в комнате и так не меньше желаемой, то он выключается.
10+
11+
«auto» — автоматический режим. В этом режиме кондиционер может как увеличивать, так и уменьшать температуру в комнате до желаемой.
12+
13+
«fan» — вентиляция. В этом режиме кондиционер осуществляет только вентиляцию воздуха и не изменяет температуру в комнате.
14+
15+
Кондиционер достаточно мощный, поэтому при настройке на правильный режим работы он за час доводит температуру в комнате до желаемой.
16+
Требуется написать программу, которая по заданной температуре в комнате ***t<sub>room</sub>***, установленным на кондиционере желаемой температуре ***t<sub>cond</sub>*** и режиму работы определяет температуру, которая установится в комнате через час.
17+
18+
19+
## Формат ввода
20+
21+
Первая строка входного файла содержит два целых числа troom, и tcond, разделенных ровно одним пробелом (–50 ≤ t<sub>room</sub> ≤ 50, –50 ≤ t<sub>cond</sub> ≤ 50).
22+
23+
Вторая строка содержит одно слово, записанное строчными буквами латинского алфавита — режим работы кондиционера.
24+
25+
## Формат вывода
26+
27+
Выходной файл должен содержать одно целое число — температуру, которая установится в комнате через час.
28+
29+
### Пример 1
30+
31+
<table><tr>
32+
<td>
33+
10 20<br>
34+
heat
35+
</td>
36+
<td>
37+
20<br>
38+
<br>
39+
</td>
40+
</tr></table>
41+
42+
### Пример 2
43+
44+
<table><tr>
45+
<td>
46+
10 20<br>
47+
freeze
48+
</td>
49+
<td>
50+
10<br>
51+
<br>
52+
</td>
53+
</tr></table>
54+
55+
<br>
56+
57+
### Примечания
58+
59+
В первом примере кондиционер находится в режиме нагрева. Через час он нагреет комнату до желаемой температуры в 20 градусов.
60+
Во втором примере кондиционер находится в режиме охлаждения. Поскольку температура в комнате ниже, чем желаемая, кондиционер самостоятельно выключается и температура в комнате не поменяется.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"os"
7+
"strconv"
8+
"strings"
9+
)
10+
11+
const (
12+
isAuto = "auto"
13+
isFreeze = "freeze"
14+
isHeat = "heat"
15+
)
16+
17+
func main() {
18+
scanner := bufio.NewScanner(os.Stdin)
19+
scanner.Scan()
20+
21+
temperatures := strings.Fields(scanner.Text())
22+
t1, _ := strconv.Atoi(temperatures[0])
23+
t2, _ := strconv.Atoi(temperatures[1])
24+
25+
scanner.Scan()
26+
action := scanner.Text()
27+
28+
fmt.Println(solution(t1, t2, action))
29+
}
30+
31+
func solution(t1, t2 int, action string) int {
32+
switch {
33+
case action == isAuto,
34+
action == isFreeze && t1 > t2,
35+
action == isHeat && t1 < t2:
36+
return t2
37+
}
38+
39+
return t1
40+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type TestItemInput struct {
9+
t1,
10+
t2 int
11+
action string
12+
}
13+
14+
type TestItemOutput int
15+
16+
type TestItem struct {
17+
input TestItemInput
18+
output TestItemOutput
19+
}
20+
21+
func TestTask(t *testing.T) {
22+
for i, v := range generateTasks() {
23+
t.Run(fmt.Sprintf("Test %d", i+1), func(t *testing.T) {
24+
val := solution(v.input.t1, v.input.t2, v.input.action)
25+
if val != int(v.output) {
26+
t.Errorf("Неверный ответ решения!\nОтвет: \n%d \nВерно: \n%d", val, v.output)
27+
}
28+
})
29+
}
30+
}
31+
32+
func generateTasks() []TestItem {
33+
return []TestItem{
34+
{TestItemInput{10, 20, "heat"}, 20},
35+
{TestItemInput{10, 20, "freeze"}, 10},
36+
{TestItemInput{10, 20, "auto"}, 20},
37+
{TestItemInput{-3, -11, "freeze"}, -11},
38+
{TestItemInput{1, 2, "fan"}, 1},
39+
{TestItemInput{0, 10, "heat"}, 10},
40+
{TestItemInput{20, 15, "heat"}, 20},
41+
}
42+
}

0 commit comments

Comments
 (0)