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

Содержание

Слайд 2

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

Сравнение существующих платформ

Codeforces
algo.ubtuit.uz
SoloLearn

Слайд 3

Codeforces Codeforces - это веб-сайт, на котором проводятся соревнования по программированию.

Codeforces

Codeforces - это веб-сайт, на котором проводятся соревнования по программированию.
Он

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

Возможности платформы Платформа Codeforces обычно используется при подготовке к соревнованиям по

Возможности платформы

Платформа Codeforces обычно используется при подготовке к соревнованиям по программированию

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

Преимущество и недостатки платформы Основные преимущества: Огромное количество задач. Частое проведение

Преимущество и недостатки платформы

Основные преимущества:
Огромное количество задач.
Частое проведение соревнований по спортивному

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

algo.ubtuit.uz Платформа algo.ubtuit.uz аналог платформы codeforces на узбекском языке. На платформе

algo.ubtuit.uz

Платформа algo.ubtuit.uz аналог платформы codeforces на узбекском языке. На платформе можно

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

Возможности платформы На платформе часто проходят соревнований по программированию. С момента

Возможности платформы

На платформе часто проходят соревнований по программированию. С момента создания

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

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

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

Слайд 9

Преимущества и недостатки Основные преимущества: Платформа на узбекском языке. Разнообразие задач.

Преимущества и недостатки

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

на платформе.
Частое проведение соревнований.
Недостатки:
Отсутствие каких-либо материалов для изучения.
Плохая поддержка. Платформа почти не развивается.
Слайд 10

SoloLearn SoloLearn — это коллекция бесплатных материалов по изучению программирования. SoloLearn

SoloLearn

SoloLearn — это коллекция бесплатных материалов по изучению программирования.
SoloLearn – мобильное

приложение, позволяющая изучать различные аспекты программирования.
Платформа была создана в 2014-году Давид Кочаряном и Ева Юсяном.
Слайд 11

Основные преимущества платформы Уроки по программированию для разной категорий людей: от

Основные преимущества платформы

Уроки по программированию для разной категорий людей: от новичков

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

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

Недостатки платформы

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

к некоторым возможностям платно
Слайд 13

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

Выводы

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

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

Цели и задачи ВКР Целью дипломного проекта является создания платформы для

Цели и задачи ВКР

Целью дипломного проекта является создания платформы для организации

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

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

Выбор платформы и технологии

Выбор платформы
В качестве основной платформы был выбран

социальная сеть Telegram.
Слайд 16

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

Telegram

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

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

Ключевая особенность платформы Ключевой особенностью мессенджера является наличие ботов. Боты При

Ключевая особенность платформы

Ключевой особенностью мессенджера является наличие ботов.
Боты
При помощи специального API

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

Выбор языка программирования и технологии Проект дипломной работы будет реализована в

Выбор языка программирования и технологии

Проект дипломной работы будет реализована в виде

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

Язык программирования Python Python – высокоуровневый язык программирования общего назначения с

Язык программирования Python

Python – высокоуровневый язык программирования общего назначения с динамической

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

Фрейморк Django Django (Джанго) — свободный фреймворк для веб-приложений на языке

Фрейморк Django

Django (Джанго) — свободный фреймворк для веб-приложений на языке Python,

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

Возможности Django Некоторые возможности Django: ORM, API доступа к БД с

Возможности Django

Некоторые возможности Django:
ORM, API доступа к БД с поддержкой транзакций.
встроенный

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

Серверная часть проекта Серверная часть полностью построена на фреймворке Django Проект

Серверная часть проекта

Серверная часть полностью построена на фреймворке Django
Проект на Django

состоит из моделей(models) и представлений (views)
Слайд 23

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

База данных (диаграмма моделей)

Проект состоит из 29 моделей (таблиц).

Слайд 24

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

Демонстрация платформы

Итоговый проект – платформа телеграм бот, веб-интерфейс для турнирных положений

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

Главное меню Интерфейс бота реализован в двух языках: Русский и Узбекский.

Главное меню

Интерфейс бота реализован в двух языках: Русский и Узбекский.
При нажатии

на кнопку «Главное меню» или при отправке команды /menu, бот отправляет пользователю сообщение с встроенной клавиатурой (inline keyboard).
Слайд 26

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

Раздел задач

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

Слайд 27

Список задач В разделе список задач находятся текущие существующие для решения

Список задач

В разделе список задач находятся текущие существующие для решения задачи.

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

Пример задачи Решение задачи можно отправлять сам код или файл. Код

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

Решение задачи можно отправлять сам код или файл. Код должен

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

Отправка решения задачи В случае, если в коде есть синтактическая или

Отправка решения задачи

В случае, если в коде есть синтактическая или логическая

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

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

Рейтинг задач

Существует рейтинг решения задач.
Пользователи сортируется по количеству решенных задач.


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

История попыток Есть раздел история попыток, позволяющий пользователю посмотреть на свои

История попыток

Есть раздел история попыток, позволяющий пользователю посмотреть на свои попытки.

При нажатии на попытку бот отправляет результата попытки и код решения.
Слайд 32

Раздел соревнований Этот раздел предназначен для проведения соревнований. При нажатии на

Раздел соревнований

Этот раздел предназначен для проведения соревнований.
При нажатии на одного из

соревнований выводится информация про соревнования.
Слайд 33

Система оценивания соревнований Участникам предлагают задачи и время для решения этих

Система оценивания соревнований

Участникам предлагают задачи и время для решения этих задач.
Существует

два типа проведения соревнований:
Классическая
Балловая
Слайд 34

Классическая система В классической система за каждую решенную задачу дается один

Классическая система

В классической система за каждую решенную задачу дается один балл.


Для каждого неправильного решения увеличивается штраф.
Штраф учитывается при равенстве решенных задач.
Слайд 35

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

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

Слайд 36

Балловая система В этой системе каждая задача имеет свой вес (балл).

Балловая система

В этой системе каждая задача имеет свой вес (балл).
За

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

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

Раздел вызовов

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

Слайд 38

Отправка нового вызова При нажатии на кнопку «Новый вызов» участнику предлагается

Отправка нового вызова

При нажатии на кнопку «Новый вызов» участнику предлагается на

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

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

Вызов

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

Вызов

Оппонент отклонил вызов

Слайд 40

Вызов При нажатии на кнопку вызов пользователя пересылает на веб-страницу с

Вызов

При нажатии на кнопку вызов пользователя пересылает на веб-страницу с заданиями.


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

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

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

Слайд 42

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

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

Слайд 43

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

Результат вызова

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

Результат вызова

Слайд 44

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

Рейтинг по вызовам

Существует рейтинг вызовов.
За каждый выигранный вызов прибавляется 1

балл, за ничейный 0,5 балл, а за проигранный 0 балл.
Слайд 45

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

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

Слайд 46

Раздел турниров Раздел турниров предназначен для проведения турниров. Турниры по проходят

Раздел турниров

Раздел турниров предназначен для проведения турниров.
Турниры по проходят по

системе:
Швейцарская система
Круговая система
Слайд 47

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

Турнир

Информация про турнир

Для участия в турнире необходимо присоединиться к турниру. Перед

началом первого тура пользователям приходит сообщение про пары первого тура.
Слайд 48

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

Результаты туров

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

Слайд 49

Турнирное положение За каждый выигранный вызов участнику дается 1 балл, за

Турнирное положение

За каждый выигранный вызов участнику дается 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

Тест При нажатии на кнопку «Начать» начинается отсчет и пользователю отправляется

Тест

При нажатии на кнопку «Начать» начинается отсчет и пользователю отправляется тест.

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

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

Лучшие результаты

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

Слайд 59

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

История попыток

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

тестов.
Слайд 60

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

Раздел профиля

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

Слайд 61

Заключение В ходе выполнения дипломной работы были выполнены все поставленные задачи

Заключение

В ходе выполнения дипломной работы были выполнены все поставленные задачи и

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