# Домашнее задание 7

Максим Николаевич не хочет задавать домашнее задание. Но очень хочет.

## 1. Довести решения занятия

`solution.py` проходит все 27 публичных тестов. Функция `split_spam` из карточки
изменения написана и покрыта тремя своими тестами. `complexity_note.md` заполнен
по всем трём задачам и по `split_spam`.

## 2. Три ошибки на границе · `bugs_07.py`

В файле три функции. Каждая верно отвечает на обычных входах и ошибается на граничном.
Для каждой функции:

1. найти вход, на котором ответ неверный или программа падает;
2. записать в `tests_bugs_07.py` тест, который на этом входе падает;
3. исправить одну строку функции;
4. прогнать тесты снова и сохранить вывод pytest в `bugs_run.txt`.

В `complexity_note.md` добавить три строки: функция → вход → что было нарушено.

## 3. Поворот плейлиста тремя разворотами

Написать в `solution.py` функцию `rotate_right(tracks: list, k: int) -> None`.
Она сдвигает плейлист на `k` позиций вправо на месте: последние `k` треков
переходят в начало, порядок внутри обеих частей сохраняется.

| До | `k` | После |
|---|---|---|
| `A B C D E` | `2` | `D E A B C` |
| `A B C D E` | `7` | `D E A B C` |
| `A B C` | `0` | `A B C` |

- Решение использует только `reverse_segment` из задачи 2, три вызова.
- `k` может быть больше длины списка и равен нулю; пустой список не меняется.
- Время O(n), дополнительная память O(1).
- Не меньше пяти своих тестов, среди них `k = 0`, `k = len`, `k > len` и пустой список.

Подсказка к проверке: `reverse_segment` поднимает `ValueError` на пустом участке.
Посмотрите, при каких `k` один из трёх участков оказывается пустым.

## Сдача

- Папка `portfolio/lesson_07/`, ветка `hw-07`, Pull Request в собственную `main`.
- Срок — до начала занятия 8.
- ИИ: код и тесты пишете сами. Оформление `.md` и редактуру формулировок можно
  поручить модели. Я сам так делаю всегда, поэтому и вам запрещать не буду.
