# Экзаменация по алгоритмическим задачам (Yandex Codenv)

Папка для самопроверки перед этапом 1 (алгоритмы, 1 час, 2 задачи). Ассистент играет роль интервьюера: выдаёт билеты по одному, пользователь формулирует основную идею решения, ответы фиксируются дословно, разбор и балл — только в конце раунда.

Задача-основание: **TASK-43**. Формат разборов задач — в `../algo-solutions/README.md` (TASK-11).

## Правила раунда

1. **Раунд = все 32 задачи** (19 Must Have + 13 extra), каждая ровно один раз.
2. **Порядок — случайное перемешивание всех 32.** Порядок фиксируется заранее в `_round.md` голыми глобальными номерами.
3. **Фидбек только в конце раунда.** Во время раунда ассистент отвечает нейтрально («записал, билет N+1»), без оценок, подсказок и уточнений по существу.
4. **Формулировка билета нейтральная**: только условие, примеры и constraints. В чат не попадают название задачи, тема, глобальный номер, сложность, ссылка на LeetCode и строка «Ключ».
5. Ответ фиксируется **дословно** в файл билета до момента разбора.
6. Код не обязателен: требуется основная идея — алгоритм, структуры данных, сложность, граничные случаи.

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

```
algo-exam/
├── README.md              ← этот файл: протокол, рубрика, конвенции
├── complexity-cheat-sheet.md ← методичка: время / память / граничные случаи + эталонная таблица по 32 задачам
├── _progress.md           ← сквозная таблица 32 задач по раундам + комплексная оценка
├── _ticket-template.md    ← шаблон файла билета
├── _round-template.md     ← шаблон шапки раунда
└── round-NN-<дата>/
    ├── _round.md          ← шапка раунда: порядок, статус, итоговая таблица, слабые места
    └── NN-<slug>.md       ← билет (NN = порядок предъявления, 01–32)
```

- `NN` в имени билета — **порядок предъявления внутри раунда**, а не глобальный номер задачи.
- Файлы билетов создаются **лениво**: только когда билет предъявлен. Заготовок на будущее в папке нет.
- **Гигиена:** во время раунда не открывать `_round.md` и уже созданные файлы билетов — в `_round.md` лежит весь порядок раунда.

## Рубрика

| Балл | Вердикт | Значение |
|------|---------|----------|
| 3 | 🟢 passed | Ключевая идея + структура данных + сложность по времени и памяти + граничные случаи |
| 2 | 🟡 partial | Идея и структура данных верны, но есть пробелы: неверная сложность, пропущены edge cases или детали алгоритма |
| 1 | 🔴 failed | Верное направление, но ключевой приём не найден (например, остался brute force) или критичная ошибка |
| 0 | 🔴 failed | Идеи нет / идея неверная |
| — | ⚪ not_attempted | Билет не отвечен (пауза, досрочный стоп). В средний балл не входит, обязателен в следующем раунде |

Критерии, которые отмечаются в каждом разборе:

- **Идея** — найден ли ключевой приём.
- **Структура данных** — правильно ли выбрана (hash, стек, deque, куча, указатели).
- **Сложность** — верно ли названы время и память (канон — [`complexity-cheat-sheet.md`](complexity-cheat-sheet.md) §10).
- **Граничные случаи** — пустой вход, один элемент, негативные значения, дубликаты, переполнение (чек-лист — [`complexity-cheat-sheet.md`](complexity-cheat-sheet.md) §9).

В разборе билета эти три пункта заполняются отдельными строками: **Время** / **Память** / **Граничные случаи** (см. `_ticket-template.md`).

## Контракты файлов

### `_round.md`

YAML: `round`, `date`, `pool: all-32`, `order` (32 уникальных глобальных номера в порядке предъявления), `tickets_total: 32`, `tickets_answered`, `status` (`in_progress` | `paused` | `stopped_early` | `completed`), `score_total`, `score_max: 96`.

Тело: итоговая таблица (билет № → глобальный № → балл → вердикт), разбивка по темам, список задач на повтор, вывод «что показал раунд».

### Файл билета `NN-<slug>.md`

YAML: `round`, `ticket_no` (порядок предъявления), `source_no` (глобальный номер из `../interview-materials.md`), `slug`, `topic`, `difficulty`, `leetcode_id`, `attempted`, `score`, `verdict`, `reviewed_at`.

Тело: `## Условие (как предъявлено)` → `## Ответ` (дословно) → `## Разбор` (что верно / что упущено и ошибки / эталонная идея / сложность / критерии / ссылка на разбор в `../../algo-solutions/`). Код эталонного решения не дублируется — только ссылка.

### `_progress.md`

Таблица всех 32 задач: № / задача / тема / сложность / балл по раундам (R1, R2, …) / лучший балл / вердикт / next review. Ниже — разбивка по темам, слабые места, комплексная оценка готовности, журнал раундов.

## Вокабуляр команд

Команды можно писать естественным языком; ниже — значения по умолчанию.

| Фраза | Действие |
|-------|----------|
| «экзамен: старт» | создать новый раунд, выдать билет 1 |
| «пауза» | приостановить раунд (`status: paused`) |
| «продолжить» | выдать следующий билет |
| «итог» | закрыть раунд досрочно и провести разбор отвеченных |
| «разбор 7» | вывести в чат полный разбор билета №7 текущего раунда |
| «статус» | краткая сводка по `_progress.md` |

## Что обновляется после раунда

1. `round-NN/_round.md` — итоговая таблица, сумма, средний, слабые места, `status: completed`.
2. `_progress.md` — баллы раунда, лучший балл, вердикты, разбивка по темам, комплексная оценка, журнал раундов.
3. `../interview-materials.md` — статусная колонка задач (🟢 / 🟡 / 🔴).
4. `../algo-solutions/*.md` — только `revision_count` (+1) и `last_revision` для пройденных задач.

## Набор следующего раунда

В R2+ попадают задачи с лучшим баллом < 3. Задачи со стабильным 3 не переспрашиваются.
