# Алгоритмические задачи — решения и разборы

Папка для хранения разборов алгоритмических задач по подготовке к собеседованию (Yandex Codenv и другие).

Структура соответствует списку задач из HR-письма (см. `../interview-materials.md`).

## Структура папок

```
algo-solutions/
├── README.md                          ← этот файл
├── _template.md                       ← шаблон для новой задачи (скопировать)
│
├── 01-must-have/                      ← Must Have для подготовки
│   ├── 01-two-pointers/               ← 4 задачи
│   ├── 02-hash-table/                 ← 7 задач
│   ├── 03-sort/                       ← 1 задача
│   ├── 04-queue-stack/                ← 1 задача
│   ├── 05-sliding-window/             ← 2 задачи
│   ├── 06-iterator/                   ← 1 задача
│   └── 07-greedy/                     ← 3 задачи
│
└── 02-extra/                          ← Дополнительная тренировка
    ├── 01-linked-lists/               ← 2 задачи
    ├── 02-dfs-bfs/                    ← 2 задачи
    ├── 03-heap-hash/                  ← 1 задача
    ├── 04-binary-search/              ← 1 задача
    ├── 05-tree/                       ← 4 задачи
    └── 06-math-string-simulation/     ← 3 задачи
```

**Итого:** 32 задачи (19 Must Have + 13 дополнительно).

## Нумерация

- Первая цифра папки = раздел HR (01 — Must Have, 02 — Дополнительно)
- Вторая цифра папки = тема внутри раздела (01–07 / 01–06)
- Двузначный номер файла = **сквозной глобальный номер** (01–32) по порядку из HR-письма

Пример: `01-must-have/02-hash-table/08-two-sum.md`
- `01` — Must Have
- `02` — Hash Table (тема 1.2)
- `08` — восьмая задача в общем списке

## Формат одного файла

Каждый файл-разбор — это Markdown с YAML-фронтматером (метаданные) и стандартными секциями.

### Метаданные (YAML front matter)

```yaml
---
title: Название задачи
difficulty: Medium        # Easy / Medium / Hard
category: Hash Table      # категория
leetcode_id: 1            # номер задачи на LeetCode
revision_count: 0         # счётчик повторений
last_revision:            # дата последнего повторения
---
```

### Секции

| Секция | Назначение | Обязательная |
|--------|-----------|--------------|
| **Условие** | Краткая формулировка + примеры | да |
| **Ключевая идея** | Одним-двумя предложениями: трюк, решающий задачу | да |
| **Оценка сложности** | Time + Space | да |
| **Решение (Ruby)** | Чистая Ruby-реализация | да |
| **Разбор на примере** | Пошаговый проход на sample input | желательно |
| **Edge Cases** | Граничные случаи | да |
| **Типичные ошибки** | Что идёт не так чаще всего | желательно |
| **Альтернативные подходы** | Brute force → оптимальный (таблица) | желательно |
| **Заметки после повторения** | Что забыл, что пошло не так | заполняется после практики |

### Именование файлов

- Формат: `NN-kebab-case-title.md`
- `NN` — **глобальный** порядковый номер (01–32), соответствующий HR-списку
- Разделитель — дефис
- Пример: `08-two-sum.md`

## Использование

1. Скопируй `_template.md` в папку нужной темы
2. Переименуй по конвенции `NN-kebab-case-title.md` (NN = глобальный номер из `../interview-materials.md`)
3. Заполни метаданные и все секции
4. После каждой тренировки увеличивай `revision_count` и дополняй **Заметки после повторения**

## Связь с планом подготовки

Список задач и приоритеты — в `../algo-stage-prep.md`.
Структура по HR-списку (с номерами) — в `../interview-materials.md`.
Полные условия — в `../problems-full.md`.
Самопроверка по билетам (раунды, баллы 0–3, сквозной прогресс) — в `../algo-exam/README.md`.
Здесь — только разборы и код.