Необходимо установить официальный пакет IDE VSCode от Microsoft. Также вам понадобится установленный Docker.
Установите плагин VSCode: ms-vscode-remote.remote-containers.
Нажать сочетание клавиш CLTR + SHIFT + P
, в строке поиска ввести Dev Containers: Reopen in Container
и нажать клавишу Enter
.
Плагин Clangd предложит установить языковой сервер, соглашайтесь.
Запустить "отладку файла" можно, открыв его и нажав F5
.
Мы используем платформу Яндекс.Контест. При отправке файла с исходным кодом в несколько этапов происходит сборка исполняемого файла.
Сперва будет проверено соответствие вашего кода принятому форматированию с помощью утилиты clang-format. При выявлении проблемы, решение упадет со статусом CE
.
Код должен соответствовать файлу конфигурации .clang-format.
На данный момент у нас не получилось наладить запуск clang-tidy
в Яндекс.Контесте, поэтому стиль кода не будет проверяться.
Однако, мы добавили конфигурационный файл .clang-tidy. Языковой сервер Clangd подхватит его и будет выдавать вам полезные замечания не только по стилю наименования переменных, но и по использованию некоторых лучших практик.
Если вы крайне не согласны с линтером, то можете подавить замечание при помощи комментария // NOLINT
.
Мы будем рады, если вы будете придерживаться данного стиля и присылать нам код без замечаний, ведь так нам будет проще его проверять и оказывать техническую поддержку.
Ваше решение будет собрано со флагами компиляции CXXFLAGS_RELEASE
, определение которых вы найдете в файле ci/build.sh.
Так как будет включен максимальный уровень оптимизаций, вы можете не бояться использовать zero-cost абстракции языка. Благодаря -DNDEBUG
вы свободно можете размещать код для отладочной печати или проверки инвариантов между директивами #ifdef
and #ifndef
, а также использовать макрос assert
.
На малых тестах будет запускаться решение собранное под санитайзерами.
CXXFLAGS_ASAN="$CXXFLAGS_RELEASE -fsanitize=address,undefined,leak"
Так что мы надеемся поймать основные ошибки при работе с памятью, особенно утечки памяти. Санитайзер будет ронять программу, из-за чего вердиктом тестовой системы будет RE
.
Для решения задач мы рекомендуем использовать официальный пакет IDE VSCode cо следующими плагинами:
- Для поддержки языкового сервера Clangd: llvm-vs-code-extensions.vscode-clangd
- Для отладки кода: ms-vscode.cpptools и vadimcn.vscode-lldb
- Для написания Makefile: ms-vscode.makefile-tools
Собирать решение рекомендуется с заданными флагами при помощи компилятора clang.
Clangd предоставит вам возможности форматирования кода, предоставит подсказки, навигацию, рефакторинги и другое. Однако вам следует отключить C_Cpp.intelliSenseEngine
от Microsoft
, чтобы он не конфликтовал с clangd
- скорее всего, VSCode
предложит вам это сделать.
Для комфортной работы можете описать простую систему сборки с использованием утилиты Make
или Shell
скриптов. Можно автоматизировать не тольку сборку исполняемого файла, но и запуск тестов, что позволит вам сэкономить время и нервы.
И обязательно настройте компиляцию файла и запуск отладчика по кнопке в VSCode
- оно того стоит.
Если ваше решение не проходит по времени, попробуйте сгенерировать большой тест, запустить решение под профилировщиком и построить Flame Graph - он может помочь диагностировать проблему. Собирая решение со включенными оптимизациями, добавьте флаг -fno-omit-frame-pointer
. Большой тест может быть удобно генерировать скриптом на Python.
Если ваше решение выдает неверный ответ или падает на одном из тестов, можете попробовать применить технику тестирования программы случайными данными. Для этого можете редактировать код функции main
так, чтобы при поданом аргументе --testing
запускать тестирование, а иначе код, читающий данные из стандартного ввода.
Удачи!