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

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

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

`dotnet run` показывает 27 passed, 0 failed. Метод `SplitSpam` из карточки
изменения написан и покрыт тремя своими тестами. `complexity_note.md` заполнен
по всем трём задачам и по `SplitSpam`.

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

В файле три метода. Каждый верно отвечает на обычных входах и ошибается на граничном.
Чтобы файл вошёл в сборку, удалите из `Lesson07.csproj` строку `<Compile Remove="Bugs07.cs" />`.
Для каждого метода:

1. найти вход, на котором ответ неверный или программа падает;
2. записать в `Tests.cs` тест, который на этом входе падает;
3. исправить одну строку метода;
4. прогнать тесты снова и сохранить вывод `dotnet run` в `bugs_run.txt`.

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

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

Написать в `Solution.cs` метод `RotateRight<T>(List<T> tracks, int k)`.
Он сдвигает плейлист на `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` |

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

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

## Сдача

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