hexlet-codebattle/codebattle

View on GitHub
TOURNAMENTS_RU.md

Summary

Maintainability
Test Coverage
# Турниры

## 1. Что такое турниры в Codebattle?

Турнир в Codebattle — это настоящая арена для программистов, где страсть к кодированию встречается с азартом соревнования. Здесь каждый поединок — это гонка на скорость между двумя игроками, решающими одну и ту же задачу. Представьте себе: вы не только пишете код, но и видите, как это делает ваш соперник. Вы можете подсмотреть его идеи, но и он может сделать то же самое с вами! Это создает уникальное напряжение, когда оба игрока видят результаты своих проверок и таймер, неумолимо отсчитывающий оставшееся время. Побеждает тот, кто быстрее и точнее решит задачу, но один неверный шаг может стоить вам победы.

## 2. Общие настройки

Каждый турнир — это уникальное событие со своими настройками, но есть общие параметры, которые делают игру честной и интересной:

- **Поддерживаемые языки программирования**: Ruby, JavaScript (Node.js), TypeScript, Dart, C++, Java, Kotlin, C#, Go, Elixir, Python, PHP, Clojure, Haskell, Rust.
- **Сложность задач**: Возможны задачи различных уровней сложности — Elementary, Easy, Medium, Hard. Можно выбрать сложность задач на весь турнир или на отдельные раунды, что позволяет адаптировать турнир под уровень участников.
- **Таймаут матча**: Если никто не достиг победы в установленное время, матч засчитывается как ничья. Это добавляет элемент срочности и делает каждую минуту на вес золота.
- **Чат**: Возможность обсудить стратегии и пообщаться с другими участниками.
- **Живая таблица с рейтингом**: В реальном времени отображаются результаты, и вы сразу видите, кто идет впереди.
- **Индивидуальный и командный зачет**: В каждом типе турниров можно выбрать индивидуальный зачет или заранее объединить участников в команды, чтобы показать общий командный зачет.
- **История матчей**: Каждый матч-поединок записывается на сервер, и вы всегда можете пересмотреть всю историю игр. В записи видно, кто и как писал код, с какой скоростью выполнялись задачи и какие решения принимались. Это отличный способ проанализировать игру и улучшить свои навыки.
- **Боты**: Для поддержания баланса в турнире используются виртуальные игроки, или боты. Они обучены решать задачи и подстраиваются под уровень реальных участников, обеспечивая равные условия для всех. Боты могут участвовать в матчах, когда не хватает реальных игроков, или чтобы создать дополнительную конкуренцию.
- **Статистика игроков**: По каждому игроку собирается подробная статистика, включая среднее время решения задач, количество побед и поражений. Это позволяет игрокам отслеживать свой прогресс и сравнивать себя с другими участниками.

## 3. Типы турниров

### Individual

- **Описание**: Турнир на выбывание, где каждый матч — это дуэль, а победитель идет дальше.
- **Как это работает**: В начале турнира создается сетка, где игроки распределяются по парам. В каждом раунде участники сражаются один на один, и победители проходят в следующий этап. Турнир продолжается до финала, где определится абсолютный чемпион.
- **Как мы дополняем участников**: Поддерживаются только 2, 4, 8, 16, 32, 64 или 128 игроков. Если участников меньше, мы добавляем ботов, чтобы обеспечить полноценную конкуренцию.
- **Кому это подходит**: Для тех, кто хочет почувствовать себя гладиатором в мире кода, проходя от раунда к раунду к заветной победе.

### Team

- **Описание**: Это сражение двух команд, где каждый игрок — важная часть общего успеха.
- **Как это работает**: Две команды сражаются в нескольких раундах, стремясь набрать определенное количество баллов. В каждом раунде игроки команд проводят одиночные матчи. Победа в раунде приносит команде 1 балл, ничья — по 0,5 балла каждой команде. Турнир завершается, когда одна из команд достигает заданного числа баллов.
- **Как мы дополняем участников**: Если команд недостаточно для создания равных условий, мы добавляем ботов.
- **Кому это подходит**: Для тех, кто ценит командную работу и стратегическое мышление, кто готов идти к победе вместе с командой.

### Arena

- **Описание**: Динамичный, бесконечный турнир, где игроки могут входить и выходить в любое время.
- **Как это работает**: В турнире арена заранее можно указать количество раундов, таймаут на раунд и время матча. Игроки начинают сражаться в первых раундах, и по мере прохождения турнира система старается матчить победителей с победителями, а проигравших с проигравшими. Это позволяет каждому игроку через несколько раундов встретиться с соперником своего уровня. Также возможно начисление утешительных баллов — если игрок проиграл матч, но сумел частично решить задачу (например, решил 90% задачи), он получит 90% от баллов победителя. Если же решение покрывает только 10% задачи, то он получит 10% очков победителя. Уровень сложности задач и время на их решение могут меняться от раунда к раунду, добавляя дополнительный элемент стратегии.
- **Как мы дополняем участников**: Если участников недостаточно, чтобы обеспечить честную игру, мы добавляем ботов, чтобы сохранить баланс.
- **Кому это подходит**: Для тех, кто любит динамичные соревнования с возможностью тестировать свои навыки на разных уровнях.

### Swiss

- **Описание**: Турнир по швейцарской системе, где участники играют несколько раундов, и каждый раунд они встречаются с соперниками, имеющими схожий уровень успеха.
- **Как это работает**: В каждом раунде участники матчатся с теми, кто имеет аналогичное количество побед, что создает равные условия для всех игроков. По итогам нескольких раундов определяется победитель.
- **Как мы дополняем участников**: Если количество игроков нечетное, мы добавляем ботов, чтобы обеспечить равное количество матчей.
- **Кому это подходит**: Для тех, кто хочет испытать свои силы в турнире, где каждый раунд приносит новые вызовы, а результаты предыдущих игр влияют на будущие матчи.

### Versus

- **Описание**: Турнир, где каждый участник сражается один на один с соперником, определяемым в случайном порядке.
- **Как это работает**: Участники встречаются в дуэлях, где победитель продвигается дальше, а проигравший выбывает. Турнир продолжается, пока не останется один чемпион.
- **Как мы дополняем участников**: Если участников недостаточно для честной конкуренции, мы добавляем ботов.
- **Кому это подходит**: Для тех, кто любит напряженные дуэли и готов к битве за титул чемпиона.