Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@
- [Часть 1. Генератор идентификаторов Twitter Snowflake](src/part1/TASK.md) — нужно написать генератор 64-битных числовых идентификаторов, в которые упакованы метка времени, номер узла и счётчик последовательности. Такие идентификаторы уникальны и примерно упорядочены по времени, а из самого идентификатора можно узнать, когда и на каком узле он был создан.
- [Часть 2. CRUD и корзина для интернет-магазина](src/part2/TASK.md) — нужно реализовать хранилище товаров в памяти (список кортежей), операции создания, чтения, изменения и удаления записей, аккуратную работу с ценами через `Decimal` и корзину покупателя, в которую товары переносятся со склада и обратно без потери количества.
- [Часть 3. Нормализация имён и консоль администратора](src/part3/TASK.md) — нужно привести названия товаров к единому написанию и следить за их уникальностью, научить хранилище печатать себя выровненной текстовой таблицей и написать интерактивную консоль администратора, через которую можно создавать, просматривать, изменять и удалять товары.
- [Часть 4. Хранилище-словарь и UUID-идентификаторы](src/part4/TASK.md) — нужно перевести хранилище со списка кортежей на словарь, выдавать товарам идентификаторы в виде UUID, завести индекс имён для быстрой проверки уникальности, научить `update_product` менять только часть полей и оформить продуктовую корзину в виде словаря.

## Дедлайны

| Задание | Дедлайн (включительно) | Статус |
|---|---|---|
| [Часть 1. Генератор идентификаторов Twitter Snowflake](src/part1/TASK.md) | 25.09.2026 | дедлайн истек |
| [Часть 2. CRUD и корзина для интернет-магазина](src/part2/TASK.md) | 02.10.2026 | дедлайн истек |
| [Часть 3. Нормализация имён и консоль администратора](src/part3/TASK.md) | 12.10.2026 | активно |
| [Часть 3. Нормализация имён и консоль администратора](src/part3/TASK.md) | 12.10.2026 | дедлайн истек |
| [Часть 4. Хранилище-словарь и UUID-идентификаторы](src/part4/TASK.md) | 01.11.2026 | активно |

## Критерии оценивания

Expand Down
16 changes: 6 additions & 10 deletions docs/grading_criteria.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,19 @@

## Как считается балл за правильность

Тесты разбиты на функциональные блоки: каждый блок соответствует функции или классу из задания и имеет свой вес (более сложные блоки весят больше). Внутри блока тесты делятся на две группы:
Задание состоит из модулей, и у каждого модуля есть свой вес. Балл за правильность считается в два шага:

| Группа тестов | Доля веса блока | Что проверяет |
|---|---|---|
| Базовые (типичные входные данные) | 70% | Основная логика реализована верно |
| Граничные (пустой ввод, нулевые и предельные значения, повторы и т. п.) | 30% | Обработка особых случаев |

Формулы:
1. Для каждого модуля вычисляется доля пройденных тестов этого модуля от общего числа его тестов. Она умножается на 10 и округляется до двух знаков после запятой.
2. Балл за правильность — взвешенная сумма баллов за модули.

```
балл_блока = 0.7 · доля_пройденных_базовых + 0.3 · доля_пройденных_граничных
балл_за_правильность = 10 · Σ(вес_блока · балл_блока) / Σ(вес_блока)
балл_модуля = round(10 · пройденные_тесты_модуля / все_тесты_модуля, 2)
балл_за_правильность = Σ(вес_модуля · балл_модуля) / Σ(вес_модуля)
```

Дополнительные правила:

- **Нереализованный функционал.** Блок, в котором функционал не реализован (заглушка, `pass`, `NotImplementedError`), получает 0 баллов. Остальные блоки оцениваются как обычно, дополнительного штрафа за нереализованное нет.
- **Нереализованный функционал.** Тесты на функционал, который не реализован (заглушка, `pass`, `NotImplementedError`), считаются проваленными. Дополнительного штрафа за нереализованное нет.
- **Ошибки выполнения.** Тест, в котором возникло необработанное исключение, считается проваленным.
- **Зависание.** У каждого теста есть ограничение по времени выполнения. Если решение не укладывается в него (например, из-за бесконечного цикла), тест считается проваленным.

Expand Down
Loading
Loading