Skip to content

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

Notifications You must be signed in to change notification settings

Wammero/school2024-test-task2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

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

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

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

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

На одном из совещаний с Заказчиком вы определили задачу, на которой будете выполнять работы по прототипированию. В качестве такой задачи была выбрана разработка отчета о наиболее популярных категориях товаров, продаваемых во время подготовки новогодних подарков покупателями.

Аналитики со стороны маркетплейса предоставили небольшой срез массива данных (файл format.json) о совершенных покупках пользователей за 4-й квартал 2023 года, на примере которого вы смогли бы ознакомиться с форматом входных данных. Каждая запись данного среза содержит следующую информацию:

  • Дата и время оформления заказа;
  • Корзина.

В пояснительной записке к массиву данных была уточняющая информация относительно формате данных, представленных в корзине. Так, например, корзина - это массив однотипных сведений о купленных товаров, определяемых следующим набором данных:

  • Идентификатор товара;
  • Наименование товара;
  • Категория.

В свою очередь сведения о категории представлены в следующем виде:

  • Идентификатор категории;
  • Наименование категории.

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

Требования к реализации:

  1. Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за формирование отчета, и должна быть описана в readme.md в соответствии с чек-листом;
  2. В качестве входных данных программа использует json-файл (input.json), соответствующий структуре, описанной в условиях задания;
  3. Процедура (функция/метод) формирования отчета должна возвращать строку в формате json следующего формата:
    • {«categories»: [«Бытовая техника»]}
    • {«categories»: [«Бытовая техника», «Косметика»]}
  4. Найденная в соответствии с условием задачи категория должна выводиться в изначальном наименовании, приведенном в файле с входными данными. Если таких категорий несколько, то на вывод они все подаются в алфавитном порядке.

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

Мусаев Нажмудин Леонардович почта - [email protected] telegram - @wammero

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

Этот код представляет собой программу на языке C++, которая анализирует данные о покупках, представленные в формате JSON, и определяет самые популярные категории товаров за определённый период времени.

1)Структуры данных:

  • item: Эта структура представляет купленный товар. Включает в себя идентификатор, название и категорию товара.
  • category_class: Вложенная в item структура, представляющая категорию товара. Включает в себя идентификатор и название категории.
  • date_time: Структура для хранения даты и времени покупки.
  • bought: Структура, хранящая информацию о времени покупки и списке купленных товаров.

2)Функции:

  • set_time: Разбивает строку времени на составляющие (год, месяц, день, час, минута, секунда) и возвращает объект date_time.
  • find: Основная функция для поиска самых популярных категорий товаров за определённый период времени. Принимает вектор всех покупок и два объекта date_time, представляющие начальную и конечную даты. Использует бинарный поиск для определения соответствующих покупок и подсчёта популярности категорий.
  • print: Выводит результат в формате JSON.

3)Основная логика:

  • В функции main открывается файл JSON с данными о покупках и считывается в объект objJson.
  • Данные о покупках извлекаются из объекта objJson и используются для создания экземпляров структуры bought.
  • Экземпляры bought добавляются в вектор all_boughts.
  • all_boughts сортируется по времени покупки для последующего бинарного поиска.
  • Задаются начальная и конечная даты для анализа.
  • Вызывается функция find, которая определяет популярные категории за заданный период времени.
  • Результат выводится с помощью функции print.

4)Примечания:

  • В коде закомментированы строки, отвечающие за запись результата в файл JSON. Если требуется сохранение результата, эти строки можно использовать, раскомментировав их.
  • Код написан с использованием стандартной библиотеки C++ и библиотеки nlohmann/json для работы с JSON данными

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

Задание было сделано в Visual Studio 2022

1)Для начала нужно скачать библиотеку для работы с json. (https://github.com/nlohmann/json/releases)

2)Создать пустой проект и добавить новый эллемент в исходные файлы. (kpok.cpp)

3)Далее нужно создать в одной папке с проектом, папку "dependencies" и закинуть в неё содерживомое скаченной библиотеки json.

4)Закинуть прикреплённый файл format.json в в папку с проектом.

5)Вставить содержимое прикреплённого файла decision.cpp в наш файл kpok.cpp

6)Запустить проект

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%