Идея проекта | КодПал

Опубликовано: 6 Октября, 2022

Описание: «Расширение кода Visual Studio, помогающее пользователям Codeforces писать код с удобством»

CodePal — это расширение кода Visual Studio, помогающее пользователям Codeforces писать код с удобством. Это расширение предназначено специально для людей, которые хотят сэкономить время на живом соревновании Codeforces и с комфортом решать проблемы. Это расширение быстро отвечает пользователям. Он может быстро фильтровать список задач, указывая теги и рейтинги, создавать папки для конкурсов и задач, содержащие примеры тестов каждой задачи в них, а также автоматически компилировать и запускать тесты. Для дополнительного удобства мы создали кнопки для непосредственного открытия описаний проблем и страниц отправки в браузере по умолчанию.

Краткий обзор используемых технологий:

NodeJS

  • Node.js — это кроссплатформенная серверная среда выполнения JavaScript с открытым исходным кодом, которая работает на движке V8 и выполняет код JavaScript вне веб-браузера. Node.js позволяет нам использовать JavaScript для написания инструментов командной строки и для сценариев на стороне сервера — запуск сценариев на стороне сервера для создания динамического содержимого веб-страницы до того, как страница будет отправлена в веб-браузер пользователя. В нашем случае в редактор VSCode.
  • Только с помощью NodeJS мы можем выполнять вызовы API к Codeforces, чтобы получить все функции наших расширений. Мы также используем NodeJS для извлечения данных из Интернета.

API-интерфейс Codeforces

  • API Codeforces чрезвычайно полезен, и большая часть наших функций выполняет вызовы API в Codeforces для получения полезной информации.
  • Но это не дает всего. Наше расширение использует небольшое количество веб-скрейпинга веб-сайта Codeforces, чтобы получить данные, которые API не предоставляет, например, тестовые примеры для проблемы.
  • Документация Codeforces API небольшая, но понятная.

Машинопись

  • TypeScript — это типизированный надмножество JavaScript, который компилируется в обычный JavaScript. Он предлагает классы, модули и интерфейсы, которые помогут вам создавать надежные компоненты.
  • Код TypeScript преобразуется в код JavaScript с помощью компилятора TypeScript или Babel. Этот JavaScript представляет собой чистый, простой код, который запускается везде, где запускается JavaScript: в браузере, на Node.JS или в приложениях. В нашем случае окончательный файл JavaScript будет работать на Node.JS.
  • Поскольку есть компиляция, Typescript значительно упрощает отладку вашего кода по сравнению с JavaScript.

API кода VS

  • Это основная причина популярности VS Code. VS Code API имеет множество полезных функций, которые не только дают нам большой контроль над средой, но и упрощают нам понимание и кодирование.
  • Организованное древовидное представление, контекстные меню, привязки клавиш, поля ввода и т. д. — вот некоторые из функций API, которые использовались в этом расширении.
  • Невозможно переоценить, насколько важна и полезна документация VS Code API Typescript. Он лаконичный, чистый и чрезвычайно информативный. Об этом проекте много говорили.

Демонстрация: войдите в настройки и просмотрите задачи, конкурсы и профиль со статусом отправки по каждой задаче.

Создавайте папки задач/конкурсов, включающие все образцы тестов, компилируйте и запускайте их автоматически, получайте исчерпывающие вердикты и просматривайте описания задач и веб-страницы отправки.

Фильтр через проблемы:

Стресс-тестирование вашего кода:

Возможности расширения и детали их реализации

Просмотрите полный список наборов задач вместе со связанными с ними тегами и рейтингами: Список задач вместе с их подробностями доступен через API Codeforces. Поддерживается класс проблем, который инициализируется путем получения сведений обо всех проблемах из этой конечной точки API. Полученный список проблем отображается в виде дерева на панели действий в левой части окна.

Быстрая фильтрация по набору задач путем указания рейтингов, тегов и статуса отправки. Список задач, отображаемых в виде дерева, фильтруется внутри на основе тегов задач, диапазона рейтинга задач и статуса отправки и повторно отображается на экране. Входные данные для фильтров поступают через API VS Code.

Просматривайте текущие, предстоящие и все прошедшие конкурсы, а также точную дату начала, время и продолжительность предстоящих конкурсов . Список конкурсов вместе с их подробностями доступен через API Codeforces. Мы поддерживаем класс конкурса, который инициализируется путем получения сведений обо всех конкурсах из этой конечной точки API. Список конкурсов также отображается в виде дерева на панели действий в левой части окна.

Быстрое создание папки одним щелчком мыши для конкурсов из списка конкурсов Codeforces и задач из списка задач Codeforces: когда пользователь хочет создать папку для задачи на Codeforces, создается папка с названием задачи и тестовыми примерами конкретная проблема скопирована с веб-страницы проблемы и включена в ту же папку.

Когда пользователь хочет создать папку конкурса, создается папка с названием конкурса, и итеративно создается папка для каждой задачи в конкурсе.

Папка для проблемы состоит из всех тестовых примеров и файла программы, загруженного с шаблоном, путь которого может быть указан в настройках: В папку с проблемой также входит файл с именем «Problem_name.{extension}», который загружается любой стартовый шаблон, который вам нравится, если вы укажете путь к шаблону в настройках расширения.

Добавьте дополнительные тесты к любой проблеме: 2 Создаются дополнительные файлы с именами «input_{test_number}.txt» и «output_{test_number}.txt», в которые пользователь может ввести желаемый ввод и ожидаемый результат соответственно.

Скомпилируйте и запустите любой программный файл в соответствии с тестовыми примерами и получите исчерпывающие результаты: библиотека *child_process* используется для запуска компиляции и запуска команд в системе хоста. Мы обязательно завершаем запущенный программный процесс, если он превышает 6 секунд выполнения. Мы измеряем время, используя гонки промисов в JavaScript. Мы устанавливаем тайм-аут в 6 секунд, а также запускаем программу, и в зависимости от того, какое обещание принимается или отклоняется, сначала заканчивается ожидание, а затем работающая программа завершается. Это очень важно, чтобы указать пользователям «Превышено время».

Код запускается для каждого из примеров тестовых случаев, которые уже присутствуют в папке задачи, и для каждого теста создается файл с выходными данными, созданными кодом, который сравнивается с ожидаемым выходным файлом для вынесения вердикта. Создается файл под названием «result.txt», содержащий все сведения о каждом из тестов, включая входные данные, ожидаемый результат, полученный результат и стандартную ошибку, а также окончательный вердикт по тесту. В случае ошибки компиляции или ошибки времени выполнения ошибка регистрируется в файле с именем «error.txt».

Откройте заявление о проблеме или страницу отправки в браузере по умолчанию одним щелчком мыши в VS Code: файл с именем «.problem.json» сохраняется в том же каталоге, что и файл проблемы. Этот файл json содержит индекс проблемы и идентификатор конкурса, в котором она участвовала, деталей, достаточных для создания URL-адреса проблемы. Поэтому, когда пользователь нажимает кнопку «Открыть заявление о проблеме», мы создаем URL-адрес с помощью файла json и открываем его в браузере по умолчанию. Точно так же можно открыть страницу сообщения о проблеме.

Компилятор может быть выбран и флаги компиляции могут быть установлены через настройки codepal: Команды запускаются для компиляции и запуска программ, написанных пользователем в его/ее собственной системе. Они компилируются и запускаются на основе языка, выбранного в настройках CodePal. Мы также допускаем дополнительные флаги компиляции, которые может захотеть добавить пользователь. Добавляем эти флаги в команду для компиляции. Пример: «-std=С++14»

Выполните стресс-тестирование, чтобы найти встречный тестовый пример для вашего кода: мы создаем еще 2 файла для пользователя

  • Файл генератора: предполагается, что этот файл должен быть заполнен пользователем для создания случайных тестовых случаев во входном формате, указанном в задаче.
  • Программный файл: пользователь может написать правильное решение или решение методом грубой силы, с которым он может сравнить свое собственное решение.

Теперь мы запускаем файл генератора и создаем тестовые примеры, а также итеративно запускаем как пользовательский код, так и файл программы, который он ввел, против сгенерированных тестовых случаев столько раз, сколько пользователь хочет. Они могут указать, сколько раз он хочет, чтобы это продолжалось в настройках. Это должно прекратиться, как только вывод, заданный кодом пользователя и программным файлом, будет отличаться.

Получите персонализированный опыт просмотра сведений о вашем профиле Codeforces и статусе отправленных сообщений о проблемах, введя свой дескриптор Codeforces в настройках codepal: Учитывая дескриптор пользователя, API codeforces может вернуть основную информацию о пользователе. Мы представляем это в разделе профиля пользователя. Codeforces API также возвращает набор всех материалов, сделанных данным пользователем. Мы сортируем отправки по идентификатору проблемы, а затем запускаем указатель на каждую отправку и проблему пользователя (которые уже отсортированы по идентификатору проблемы) и определяем статус отправки проблемы (пройдено, не выполнено, не предпринято).

Поддерживаемые языки:

  • С++ (компилятор: g++)
  • C (компилятор: gcc)
  • Java (компилятор: javac)
  • питон

Примечание. Вы можете добавить дополнительные флаги компиляции через настройки codepal (пример: -std=c++14), а также выбрать между python, python2 или python3 в зависимости от команды python, которую вы используете в своей системе для запуска.

Поддерживаемые операционные системы:

  • Окна
  • линукс
  • МАК

Горячие клавиши:

  • Ctrl + Alt + A (*Cmd + Alt + A* для Mac): добавить ручные тестовые случаи
  • Ctrl + Alt + R (*Cmd + Alt + R* для Mac): запуск тестовых случаев в файле решения
  • Ctrl + Alt + O (*Cmd + Alt + O* для Mac): открыть заявление о проблеме на Codeforces.
  • Ctrl + Alt + S (*Cmd + Alt + S* для Mac): открыть страницу сообщения о проблеме на Codeforces.
  • Ctrl + Alt + Z (*Cmd + Alt + Z* для Mac): начать стресс-тестирование.
  • Ctrl + Shift + Z (*Cmd + Shift + Z* для Mac): принудительно остановить стресс-тестирование

Вывод: создание расширения VS Code — отличный способ понять, как работает такой популярный редактор кода, как VS Code. Также это расширение помогает сообществу соревновательного программирования.

  • Эта идея была реализована в виде проекта с открытым исходным кодом. В настоящее время у нас более 1200 загрузок и более 550 активных установок.
  • Вы можете установить наше расширение здесь.
  • Чтобы узнать больше о CodePal и его кодовой базе, вы можете посетить его общедоступный репозиторий здесь.
  • Подробное руководство по использованию можно найти здесь.

Члены команды

  • Джанманш Агарвал
  • Ниранджан Ядияла
  • Адитья Чираниа
  • Правин Редди