3.40M
Категория: ПрограммированиеПрограммирование

ВКР: Разработка платформы для организации соревнований по программированию на языке Python

1.

РАЗРАБОТКА ПЛАТФОРМЫ ДЛЯ
ОРГАНИЗАЦИИ СОРЕВНОВАНИЙ ПО
ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ
PYTHON
Студент:
Научный руководитель:
26.06.2021 y.
Балтабаев Назарбек
Давронов Муроджон
Ургечский филиал ТУИТ

2.

Сравнение существующих платформ
• Codeforces
• algo.ubtuit.uz
• SoloLearn

3.

Codeforces
• Codeforces - это веб-сайт, на котором проводятся соревнования по программированию.
• Он поддерживается группой программистов Университета ИТМО во главе с Михаилом
Мирзаяновым.
• По состоянию на 2018 год у него более 600 000 зарегистрированных пользователей.
• Codeforces вместе с другими подобными веб-сайтами используются ведущими
спортивными программистами, такими как Геннадий Короткевич, Петр Митричев,
Бенджамин Ци и Макото Соеджима, а также другими программистами,
заинтересованными в развитии своей карьеры.

4.

Возможности платформы
Платформа Codeforces обычно используется при подготовке к соревнованиям по программированию и
предлагает следующие функции:
Короткие (2-часовые) соревнования, называемые «Codeforces Round», проводятся примерно раз в неделю.
Образовательные конкурсы (2-2,5 часа, при 12-часовом периоде взлома). проводятся 2-3 раза в месяц.
Бросить вызов/взломать решения других участников.
Решать задачи из предыдущих конкурсов в тренировочных целях.
Функция «Polygon» для создания и тестирования задач.
Социальные сети через внутренние общедоступные блоги.

5.

Преимущество и недостатки платформы
Основные преимущества:
Огромное количество задач.
Частое проведение соревнований по спортивному программированию.
Видеолекции по спортивному программированию.
Недостатки:
Высокой порог вхождения.
Отсутствие материалов по изучению языков программирования.
Задачи связаны обычно со спортивным программированием.

6.

algo.ubtuit.uz
• Платформа algo.ubtuit.uz аналог платформы codeforces на узбекском языке. На
платформе можно решать задачи по спортивному программированию, часто проходят
состязания по программированию.
• Платформа была создана студентами и учителями УФТУИТ в 2009-году. Позже в 2019
году платформа была модифицирована и обновлена магистрантами и студентами
УФТУИТ, среди которых: Муроджон Давронов, Балтабаев Назарбек и другие.
• Платформа предлагает решать задачи по спортивному программированию. Для этого
необходимо зарегистрироваться на сайте. На сайте имеется больше 1000 задач
различной тематике: математика, геометрия, теория графов и другие.

7.

Возможности платформы
На платформе часто проходят соревнований по программированию. С момента создания платформы
были проведены более 50 соревнований. Соревнований проходят по двум видам:
1. ACM-система
2. Балловая система
В первом случае каждая задача оценивается в 1 балл и выигрывает тот участник, решивший
наибольшее количество задач за период состязания. При равенстве баллов, сравнивается штрафы.
Во втором случае каждый балл имеет свой вес(балл) и этот балл уменьшается с течением временем.
Победителем становится участник, набравший наибольший балл.

8.

Турнирное положение одной из соревнований

9.

Преимущества и недостатки
Основные преимущества:
• Платформа на узбекском языке.
• Разнообразие задач. Более 1000 задач на платформе.
• Частое проведение соревнований.
Недостатки:
• Отсутствие каких-либо материалов для изучения.
• Плохая поддержка. Платформа почти не развивается.

10.

SoloLearn
• SoloLearn
— это коллекция бесплатных материалов по изучению программирования.
• SoloLearn – мобильное
программирования.
приложение,
позволяющая
изучать
• Платформа была создана в 2014-году Давид Кочаряном и Ева Юсяном.
различные
аспекты

11.

Основные преимущества платформы
Уроки по программированию для разной категорий людей: от новичков до
профессионалов.
Тесты для каждого урока.
Возможность поделиться своими работами с обществом.
Возможность соревноваться с другими участниками платформы.
Система рангов и рейтинг.

12.

Недостатки платформы
• Платформа создана только как мобильное приложение
• Нет полноценных соревнований по программированию
• Доступ к некоторым возможностям платно

13.

Выводы
• Анализ
существующих
платформ
для
организации
соревнований
по
программированию показывает, что в некоторых платформах хорошо организована
система проведений соревнований, но не хватает материалов для обучения и
тренировки к этим соревнованием, а в некоторых платформах хорошо реализована
система обучения, но плохо или вовсе не реализована система проведения
соревнований по программированию.

14.

Цели и задачи ВКР
Целью дипломного проекта является создания платформы
программированию. По этой причины поставлены следующие задачи:
для
организации
соревнований
по
Создание платформы для организации соревнований по программированию, в которой будут реализованы следующие разделы:
1.
Раздел соревнований. Этот раздел служит для проведения соревнований по программированию.
2.
Раздел задач, в котором пользователи могут решать задачи по программированию.
3.
Раздел вызовов. В этом разделе пользователи могут бросить друг к другу вызовы.
4.
Раздел турниров будет предназначен для проведения турниров, в котором пользователи будут соревноваться друг с другом.
5.
Раздел проектов. В этом разделе пользователи будут выполнять проекты. Принципиальное отличие проектов от задач в том,
что проекты будут состоят из различных подзадач и можно выполнить любого из них и получать за это баллы, в то время в
задаче необходимо полностью решить задачу.
6.
Раздел марафонов для организации турниров по выполнению проектов.
7.
Раздел уроков для изучения программирования.
8.
Раздел тестов для проверки знании по урокам.

15.

Выбор платформы и технологии
Выбор платформы
• В качестве основной платформы был выбран социальная сеть Telegram.

16.

Telegram
• Telegram – кроссплатформенный мессенджер с функциями VoIP, позволяющий обмениваться
текстовыми, голосовыми и видеосообщениями, стикерами и фотографиями, файлами многих
форматов. Также можно совершать видео и аудиозвонки, организовывать конференции,
многопользовательские группы и каналы.

17.

Ключевая особенность платформы
Ключевой особенностью мессенджера является наличие ботов.
Боты
При помощи специального API сторонние разработчики могут создавать «ботов», специальные
аккаунты, управляемые программами. Типичные боты отвечают на специальные команды в
персональных и групповых чатах, также они могут осуществлять поиск в интернете или выполнять
иные задачи, применяются в развлекательных целях или в бизнесе.
Чат-бот (виртуальный собеседник, программа-собеседник) – программа, которая выясняет
потребности пользователей, а затем помогает удовлетворить их. Автоматическое общение с
пользователем ведется с помощью текста или голоса. Чат-бот ведет коммуникацию от лица компании
или бренда с целью упростить онлайн-общение (предоставить актуальную информацию в наиболее
оперативные сроки), используется как альтернатива переписке с живым оператором или звонку
менеджеру компании.

18.

Выбор языка программирования и
технологии
• Проект дипломной работы будет реализована в виде телеграм бота и веб-приложения.
• Основная часть проекта будет реализована на языке программирования Python. Язык
популярный, универсальный, легкий. Подходит для быстрой разработки малых и средних
размеров проектов.
• Серверная часть будет реализована полностью на языке Python на фреймворке Django. Django
— это высокоуровневый веб-фреймворк Python, который способствует быстрой разработке и
чистому, прагматичному дизайну. Созданный опытными разработчиками, он берет на себя
большую часть хлопот веб-разработки, поэтому можно сосредоточиться на написании
приложения, не изобретая велосипед.
• Для разработки бота будет использована библиотека pyTelegramBotApi, написанная на языке
программирования Python.
• Будут использованы веб-технологии, такие, как HTML, CSS, Javascript.

19.

Язык программирования Python
• Python – высокоуровневый язык программирования общего назначения с динамической
строгой типизацией и автоматическим управлением памятью, ориентированный на повышение
производительности разработчика, читаемости кода и его качества, а также на обеспечение
переносимости написанных на нём программ.
• Язык является полностью объектно-ориентированным — всё является объектами.
• Необычной особенностью языка является выделение блоков кода пробельными отступами.
• Синтаксис ядра языка минималистичен, за счёт чего на практике редко возникает
необходимость обращаться к документации.
• Сам же язык известен как интерпретируемый и используется в том числе для написания
скриптов.
• Недостатками языка являются зачастую более низкая скорость работы и более высокое
потребление памяти написанных на нём программ по сравнению с аналогичным кодом,
написанным на компилируемых языках, таких как Си или C++.

20.

Фрейморк Django
• Django (Джанго) — свободный фреймворк для веб-приложений на языке Python,
использующий шаблон проектирования MVC.
• Проект поддерживается организацией Django Software Foundation.
• Для работы с базой данных Django использует собственный ORM, в котором модель данных
описывается классами Python, и по ней генерируется схема базы данных.

21.

Возможности Django
Некоторые возможности Django:
ORM, API доступа к БД с поддержкой транзакций.
встроенный интерфейс администратора, с уже имеющимися переводами на многие языки. интернационализация.
подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты.
«generic views» — шаблоны функций контроллеров.
авторизация и аутентификация, подключение внешних модулей аутентификации: LDAP, OpenID и проч.
система фильтров («middleware») для построения дополнительных обработчиков запросов, как например
включённые в дистрибутив фильтры для кеширования, сжатия, нормализации URL и поддержки анонимных сессий.
библиотека для работы с формами (наследование, построение форм по существующей модели БД).

22.

Серверная часть проекта
• Серверная часть полностью построена на фреймворке Django
• Проект на Django состоит из моделей(models) и
представлений (views)

23.

База данных (диаграмма моделей)
• Проект состоит из 29 моделей (таблиц).

24.

Демонстрация платформы
Итоговый
телеграм
бот,
проект

платформа
веб-интерфейс
для
турнирных положений и для вызовов и
интерфейс администрирования.
Ниже
демонстрация
всех
возможностей платформы.
При нажатии на кнопку /start в
телеграм бот бот отправляет информацию
про бот и клавиатуру.

25.

Главное меню
Интерфейс бота реализован в двух
языках: Русский и Узбекский.
При нажатии на кнопку «Главное
меню» или при отправке команды /menu,
бот отправляет пользователю сообщение с
встроенной клавиатурой (inline keyboard).

26.

Раздел задач
Раздел задач состоит из 3 пунктов:
Список задач
Рейтинг
История попыток

27.

Список задач
• В разделе список задач находятся
текущие существующие для решения
задачи. На данный момент в разделе
более 150 задач.
• Задачи можно отсортировать по порядку,
по сложности и по баллу.
• Каждая задача имеет свой балл,
сложность и теги. Сложность разделена
на 4 категорий: легкая, средняя, трудная,
очень трудная.

28.

Пример задачи
• Решение задачи можно отправлять сам код
или файл. Код должен быть написан на
языке программирования Python.
• После отправки бот отправляет сообщение
с текстом «отправлено на проверку,
ждите ответа». Бот принимает решения
пользователя и отправляет в базу решений.
Решение
тестируется
системой.
После
проверяющей
проверки
отправляется пользователю.
результат

29.

Отправка решения задачи
• В случае, если в коде есть синтактическая или
логическая ошибка, то с результатом бот
отправляет и сам текст ошибки. В случае если
решение окажется неверной, бот предлагает
попробовать заново решить эту задачу.

30.

Рейтинг задач
• Существует рейтинг решения задач.
• Пользователи сортируется по количеству
решенных задач.
• При равенстве количество решенных задач,
пользователи сортируется по сложности
решенных задач.
• Чем больше и сложнее решенная задача, тем
выше пользователь находится.

31.

История попыток
• Есть раздел история попыток, позволяющий
пользователю посмотреть на свои попытки. При
нажатии на попытку бот отправляет результата
попытки и код решения.

32.

Раздел соревнований
• Этот раздел
соревнований.
предназначен
для
проведения
• При нажатии на одного из соревнований выводится
информация про соревнования.

33.

Система оценивания соревнований
Участникам предлагают задачи и время для решения этих задач.
Существует два типа проведения соревнований:
• Классическая
• Балловая

34.

Классическая система
• В классической система за каждую решенную задачу дается один балл.
• Для каждого неправильного решения увеличивается штраф.
• Штраф учитывается при равенстве решенных задач.

35.

Веб-страница турнирного положения
соревнований

36.

Балловая система
• В этой системе каждая задача имеет свой вес (балл).
• За каждую неверную попытку у задачи отнимается балл в
размере 10% от первоначального.
• После 5-ой неверной попытки балл задачи больше не
уменьшится.
• При равенстве набранных баллов учитывается штраф.
• Штраф равен сумме потраченного времени на решения
каждую задачу в минутах.
• Для нерешенной задачи штраф не учитывается.
• При равенстве баллов и штрафа учитывается время
последней решенной задачи пользователя.

37.

Раздел вызовов
Раздел вызовов состоит из 3 пунктов:
• Новый вызов
• Рейтинг
• История вызовов

38.

Отправка нового вызова
• При нажатии на кнопку «Новый вызов»
участнику предлагается на выбор 10 случайных
пользователей.
• При нажатии на одного из них, пользователю
отправляется сообщение с предложением
принять или отклонить вызов.
• Если
пользователь
отклонить
вызов,
отправившему
пользователю
приходит
сообщение.
• Если пользователь примет вызов, то обоим
участникам отравляется вызов с информацией.

39.

Вызов
Пользователю предлагается принять или отклонить вызов
Оппонент отклонил вызов
Вызов

40.

Вызов
При нажатии на кнопку вызов пользователя пересылает на веб-страницу с заданиями.
Задании бывают двух видов:
• С вариантами. В этом случае выбирается один из вариантов.
• Без вариантов. В этом случае вводится ответ на задание.
На каждую заданию дается определенное время (обычно 40-50 секунд).
После окончания приходит сообщение от бота с результатом вызова.

41.

Веб-страница вызова

42.

Пример задании

43.

Результат вызова
Результат вызова
Веб-страница с результатом

44.

Рейтинг по вызовам
• Существует рейтинг вызовов.
• За каждый выигранный вызов прибавляется 1
балл, за ничейный 0,5 балл, а за проигранный 0
балл.

45.

История вызовов

46.

Раздел турниров
Раздел турниров
турниров.
предназначен
Турниры по проходят по системе:
1. Швейцарская система
2. Круговая система
для
проведения

47.

Турнир
Для участия в турнире необходимо присоединиться
Информация про турнир
к турниру. Перед началом первого тура пользователям
приходит сообщение про пары первого тура.

48.

Результаты туров
• При нажатии на «Результаты туров»
выводится результаты всех туров турнира.

49.

Турнирное положение
• За каждый выигранный вызов участнику
дается 1 балл, за ничью 0,5 балл, а за
проигрыш отнимается 0 балл.

50.

Раздел проектов
Этот раздел предназначен для выполнения
проектных работ. Раздел состоит из 2 пунктов:
• Список проектов
• История попыток
При нажатии на список проектов бот представит
список существующих проектов.
На данных момент для выполнения доступны 3
проекта.

51.

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

52.

Раздел марафонов
• Раздел марафонов похоже на раздел соревнований.
• Вместо задач участникам предлагаются выполнить проекты.
• Турнирное положение определяется набранным баллом участников.

53.

Раздел уроков
Раздел уроков предназначен для изучения и подготовки к соревнованиям по
программированию.
Уроки
разделены
по
категориям.
Каждый
урок
представляет собой интерактивное обучение, материалов, теста и задачи к
нему.
На данный момент уроки разделены на 6 глав:
Python basic
Python advanced
Telegram bot
Django ORM
Web scraping
Algorithms

54.

Урок
Пример урока
Пример интерактивного урока

55.

Раздел тестов
Этот раздел предназначен для проверки знаний
пользователей.
Раздел состоит из 2 пунктов:
• Список тестов
• История попыток

56.

Тест
• При нажатии на любого из тестов,
предоставит информацию про тест.
бот
• Для каждого теста есть количество вопросов,
время для прохождения и лучший результат по
тесту.

57.

Тест
При нажатии на кнопку «Начать» начинается
отсчет и пользователю отправляется тест.
Тесты бывают двух видов:
1. Тесты, в котором выбирается только один
ответ
2. Тесты, в котором ответов может быть
несколько.
Каждый тест можно проходить один раз в день.
После
окончания
теста
пользователю
предоставляют информацию о том, сколько
правильных ответов он дал.

58.

Лучшие результаты
Для каждого теста можно
результаты по этому тесту.
узнать
лучшие

59.

История попыток
• Пункт
«История
информацию
про
прохождению тестов.
попыток»
последние
предоставит
попыток
по

60.

Раздел профиля
Раздел предназначен для просмотри информации
про пользователя:
• Набранные баллы
• Рейтинг задач
• Звание
• Рейтинг вызовов
• Звание

61.

Заключение
В ходе выполнения дипломной работы были выполнены все поставленные задачи и достигнуты результаты.
Были анализированы существующие платформы для организации соревнований по программированию и
сделаны выводы. Реализована платформа, где пользователи могут соревноваться друг с другом, изучать и
решать задачи по программированию. Дополнительно была реализована следующие задачи:
Реализовать раздел задании, где пользователи могут в течении определенного времени выполнять
задании.
Раздел профиля и рейтингов, где каждый пользователь может посмотреть информацию про самого себя и
рейтинг пользователей.
В качестве платформы была выбрана мессенджер телеграм. Ключевой особенностью этой платформы
является наличие ботов.
Серверная часть была реализована полностью на языке Python на фреймворке Django.

62.

Xulosa
• Xulosa qilinadi
• Bunda masalaning qo’yilishi slaydida qanday masalalar qo’yilgan
bo’lsa, ularning bajarilgan bajarilmaganligini tavsiflash lozim
English     Русский Правила