Skip to content

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Notifications You must be signed in to change notification settings

olena2424/school2024-test-task4

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Условие задания

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

Вами была придумана рейтинговая таблица самых активных контрибьютеров за спринт. Что это значит в теории: по окончании итерации (4 рабочие недели) выгружается список коммитов, сделанных в релизную ветку продукта, и на его основе вычисляются трое самых активных разработчиков, сделавших наибольшее количество коммитов. В зависимости от занятого места, разработчик получает определенное количество внутренней валюты вашей компании, которую он впоследствии может обменять на какие-то товары из внутреннего магазина.

На практике вы видите решение следующим образом: на следующий день после окончания спринта в 00:00 запускается автоматическая процедура, которая забирает файл с данными о коммитах в релизную ветку, сделанных в период спринта, после чего выполняется поиск 3-х самых активных контрибьютеров. Имена найденных разработчиков записываются в файл, который впоследствии отправляется вам на почту.

В рамках практической реализации данной задачи вам необходимо разработать процедуру формирование отчета “Топ-3 контрибьютера”. Данная процедура принимает на вход текстовый файл (commits.txt), содержащий данные о коммитах (построчно). Каждая строка содержит сведения о коммите в релизную ветку в формате: “<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”. Например: AIvanov 25ec001 2024-04-24T13:56:39.492

К данным предъявляются следующие требования:

  • имя пользователя может содержать латинские символы в любом регистре, цифры (но не начинаться с них), а также символ "_";
  • сокращенный хэш коммита представляет из себя строку в нижнем регистре, состояющую из 7 символов: букв латинского алфавита, а также цифр;
  • дата и время коммита в формате YYYY-MM-ddTHH:mm:ss.

В результате работы процедура формирует новый файл (result.txt), содержащий информацию об именах 3-х самых активных пользователей по одному в каждой строке в порядке убывания места в рейтинге. Пример содержимого файла: AIvanov AKalinina CodeKiller777

Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение.

Автор решения

Пугаева Алина Михайловна

Описание реализации

Реализация задания состоит из трёх основных функций:

  • read_commits()
  • find_top(commits_dict)
  • write_winners(winners)

Сначала функция read_commits() построчно считывает файл с данными (commits.txt). Для каждой строки проводится проверка правильности полученных данных с помощью функции check_line(line). Она, в свою очередь, проверяет соответствие формата полученной строки заданному (“<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”), а после, используя функции check_name(user_name), check_hash(commit_hash), check_date(commit_date), проверяется правильность имени пользователя, хэша коммита и даты и времени коммита в соответствии с требованиями, указанными выше, в README.md. Проверки осуществляются с помощью регулярных выражений и модуля datetime. Если запись удовлетворяет всем условиям, имя пользователя добавляется в словарь, который хранит пары {имя пользователя : множество хэшей коммитов, сделанных пользователем}. Множество хэшей коммитов хранится для того, чтобы при подсчёте количества коммитов, сделанных пользователем, учитывать только уникальные. Если запись не прошла все проверки, данные, связанные с ней, не добавляются в словарь.

Далее функция find_top(commits_dict) принимает словарь {Имя пользователя : количество сделанных коммитов} (изменяем словарь, полученный из read_commits() с помощью функции map) и сортирует его по значениям в порядке убывания. Из полученного нового словаря собирается список из 3-х первых имён (то есть, сюда попадают имена тех, кто сделал больше всего коммитов).

Функция write_winners(winners) записывает в файл result.txt имена 3-х самых активных пользователей, полученные списком из функции find_top(commits_dict), по одному в каждой строке в порядке убывания места в рейтинге. Если список победителей winners пуст, то в result.txt записывается строка "NO WINNERS".

Инструкция по сборке и запуску решения

Перед запуском решения необходимо убедиться, что в папке проекта находится файл commits.txt.

При условии, что мы находимся в директории school2024-test-task4, в консоли пишем: python3 main.py

Если мы находимся в другой директории, после python3 указывается весь путь до файла main.py.

Результат выполнения хранится в файле result.txt.

Если не установлен python, то его нужно установить перед запуском.

About

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%