Coder Social home page Coder Social logo

su-mrak / school2024-test-task7 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from croc-code/school2024-test-task7

0.0 0.0 0.0 7 KB

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

C++ 100.00%

school2024-test-task7's Introduction

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

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

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

Вами была придумана рейтинговая таблица самых активных контрибьютеров за спринт. Что это значит в теории: по окончании итерации (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

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

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

Ковалева Мария Анатольевна

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

В программе main.cpp реализована функция writeResult(). Она создает или переписывает файл result.txt, передавая в него имена 3 самых активных контрибьюторов за последние 4 недели (спринт).

Также для работы созданы:

  • Структура Contributor, чтобы хранить имя пользователя и кол-во его коммитов за последние 4 недели. Для структуры создан компоратор, сравнивающий кол-во коммитов
  • Функция isWithinFourWeeks для проверки, что передаваемая дата находится в пределах последних 4 недель
  • Функция countCommits, которая получает путь до файла commits.txt (предполагается, что он находится в корневой папке проекта), считает коммиты для каждого пользователя и отдает отсортированный по убыванию вектор Contributor

Возможные доработки в будущем:

  • Установить регулярный запуск программы можно с помощью утилиты cron и скрипта, который читает result.txt после выполнения программы. Для этого необходимо создать start.sh (для windows другое расширение):
  1. touch start.sh
  2. В файл start.sh:
#!/bin/bash
cd #путь до папки с репозиторием
./top3
cat result.txt

И создать правило для cron:

  1. В командной строке crontab -e
  2. Выбрать удобный редактор и в конфигурационном файле прописать запуск start.sh:
SHELL=/bin/bash
MAILTO= #указать свою почту
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

0 0 */28 * * root /путь_к_start.sh/start.sh

Сохранить при выходе из редактора. С помощью этой настройки скрипт будет запускаться каждые 28 дней.

Для настройки отправки сообщений на почту в linux.

  • Как обрабатывать ситуацию, если больше чем у 3 пользователей максимальное кол-во коммитов за спринт? Можно выводить всех, выбирать трёх рандомных из них. Или выбирать из них тех, у кого было больше всего коммитов в день за месяц :)
  • Обработка чтения commits.txt на строки с нарушенным форматом (имя пользователя, не подходящее под условие, неверная запись версии коммита, неверная дата)

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

Для сборки и запуска необходим компилятор C++17. В репозиторий с программой поместите commits.txt для тестирования, после чего можно запускать программу.

Запуск с помощью g++ через терминал Linux:

  1. Перейдите в папку с репозиторием
  2. Выполните команду для сборки:
g++ main.cpp -o top3
  1. Чтобы запустить программу выполните:
./top3

В папке с репозиторием появится result.txt

Запуск на Windows с помощью g++:

  1. Установите компилятор
  2. Откройте консоль, перейдите в папку с репозиторием
  3. Выполните команду для сборки:
g++ main.cpp -o top3
  1. Чтобы запустить программу выполните:
top3

В папке с репозиторием появится result.txt

school2024-test-task7's People

Contributors

ph4rr3ll avatar su-mrak avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.