Skip to content

Commit

Permalink
feat: start yandex_training 1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitryburov committed Feb 4, 2024
1 parent 8262ac2 commit 1ef5844
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 1 deletion.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,12 @@
## Яндекс тренировки 1.0
<a name="yandex_train_1"></a>

В процессе...
<details>
<summary>Лекция 1: «Сложность, тестирование, особые случаи»</summary>

- [X] [A. Кондиционер](yandex_training_1/study_1/A)

</details>

<br>

Expand Down
60 changes: 60 additions & 0 deletions yandex_training_1/study_1/A/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# A. Кондиционер

В офисе, где работает программист Петр, установили кондиционер нового типа. Этот кондиционер отличается особой простотой в управлении. У кондиционера есть всего лишь два управляемых параметра: желаемая температура и режим работы.

Кондиционер может работать в следующих четырех режимах:

«freeze» — охлаждение. В этом режиме кондиционер может только уменьшать температуру. Если температура в комнате и так не больше желаемой, то он выключается.

«heat» — нагрев. В этом режиме кондиционер может только увеличивать температуру. Если температура в комнате и так не меньше желаемой, то он выключается.

«auto» — автоматический режим. В этом режиме кондиционер может как увеличивать, так и уменьшать температуру в комнате до желаемой.

«fan» — вентиляция. В этом режиме кондиционер осуществляет только вентиляцию воздуха и не изменяет температуру в комнате.

Кондиционер достаточно мощный, поэтому при настройке на правильный режим работы он за час доводит температуру в комнате до желаемой.
Требуется написать программу, которая по заданной температуре в комнате ***t<sub>room</sub>***, установленным на кондиционере желаемой температуре ***t<sub>cond</sub>*** и режиму работы определяет температуру, которая установится в комнате через час.


## Формат ввода

Первая строка входного файла содержит два целых числа troom, и tcond, разделенных ровно одним пробелом (–50 ≤ t<sub>room</sub> ≤ 50, –50 ≤ t<sub>cond</sub> ≤ 50).

Вторая строка содержит одно слово, записанное строчными буквами латинского алфавита — режим работы кондиционера.

## Формат вывода

Выходной файл должен содержать одно целое число — температуру, которая установится в комнате через час.

### Пример 1

<table><tr>
<td>
10 20<br>
heat
</td>
<td>
20<br>
<br>
</td>
</tr></table>

### Пример 2

<table><tr>
<td>
10 20<br>
freeze
</td>
<td>
10<br>
<br>
</td>
</tr></table>

<br>

### Примечания

В первом примере кондиционер находится в режиме нагрева. Через час он нагреет комнату до желаемой температуры в 20 градусов.
Во втором примере кондиционер находится в режиме охлаждения. Поскольку температура в комнате ниже, чем желаемая, кондиционер самостоятельно выключается и температура в комнате не поменяется.
40 changes: 40 additions & 0 deletions yandex_training_1/study_1/A/task.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package main

import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)

const (
isAuto = "auto"
isFreeze = "freeze"
isHeat = "heat"
)

func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()

temperatures := strings.Fields(scanner.Text())
t1, _ := strconv.Atoi(temperatures[0])
t2, _ := strconv.Atoi(temperatures[1])

scanner.Scan()
action := scanner.Text()

fmt.Println(solution(t1, t2, action))
}

func solution(t1, t2 int, action string) int {
switch {
case action == isAuto,
action == isFreeze && t1 > t2,
action == isHeat && t1 < t2:
return t2
}

return t1
}
42 changes: 42 additions & 0 deletions yandex_training_1/study_1/A/task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package main

import (
"fmt"
"testing"
)

type TestItemInput struct {
t1,
t2 int
action string
}

type TestItemOutput int

type TestItem struct {
input TestItemInput
output TestItemOutput
}

func TestTask(t *testing.T) {
for i, v := range generateTasks() {
t.Run(fmt.Sprintf("Test %d", i+1), func(t *testing.T) {
val := solution(v.input.t1, v.input.t2, v.input.action)
if val != int(v.output) {
t.Errorf("Неверный ответ решения!\nОтвет: \n%d \nВерно: \n%d", val, v.output)
}
})
}
}

func generateTasks() []TestItem {
return []TestItem{
{TestItemInput{10, 20, "heat"}, 20},
{TestItemInput{10, 20, "freeze"}, 10},
{TestItemInput{10, 20, "auto"}, 20},
{TestItemInput{-3, -11, "freeze"}, -11},
{TestItemInput{1, 2, "fan"}, 1},
{TestItemInput{0, 10, "heat"}, 10},
{TestItemInput{20, 15, "heat"}, 20},
}
}

0 comments on commit 1ef5844

Please sign in to comment.