Skip to content

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

Notifications You must be signed in to change notification settings

tesinitsyn/school2024-test-task6

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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

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

Что еще важно знать о списаниях времени. У каждого сотрудника компании есть норма списания - количество времени, которое необходимо списывать за рабочий день. В общем случае (и в рамках задачи делаем допущение, что во всех случаях) такая норма составляет 8 часов в день. Однако сотрудники по тем или иным причинам могут списывать как больше 8 часов, так и меньше, в результате чего образуется дизбаланс.

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

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

На текущий момент система управления содержит функцию выгрузки списаний “TSR-3” (присвоенный отчету код) за указанный период в следующем формате:

"<id сотрудника в формате UUID> <Фамилия> <Имя> <Отчество> <Дата списания в формате dd.MM.YYYY> <количество часов>"

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

a30b4d51-11b4-49b2-b356-466e92a66df7 Иванов Иван Иванович 16.05.2024 4
0f0ccd5e-cd46-462a-b92d-69a6ff147465 Петров Алексей Сергеевич 16.05.2024 6
a30b4d51-11b4-49b2-b356-466e92a66df7 Иванов Иван Иванович 16.05.2024 2.5
0f0ccd5e-cd46-462a-b92d-69a6ff147465 Петров Алексей Сергеевич 16.05.2024 2
a30b4d51-11b4-49b2-b356-466e92a66df7 Иванов Иван Иванович 16.05.2024 1.5

По данному примеру видно, что оба сотрудника (Петров А.С. и Иванов И.И.) списали за 16 мая каждый по 8 часов, но, скорее всего, в разные задачи.

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

  1. На вход программа для анализа получает файл со списаниями report.txt за конкретную рабочую неделю. О формате файла известно следующее:
    • в первой строке файла указывается недельная норма списания на одного сотрудника (из расчета дневной нормы списания, равной 8 часам; например, 40 для пятидневной рабочей недели);
    • во всех последующих строках файла указывается перечень списаний сотрудников в формате отчета “TSR-3”.
  2. Программа определяет сотрудников, у которых дизбаланс списаний времени за неделю составляет более 10% в обе стороны;
  3. Найденные сотрудники с дизбалансом по итогам работы программы записываются в текстовый файл result.txt в следующем виде: "<Фамилия И.О.> <количество часов, составляющих дизбаланс, с указанием знака>". Количество часов дизбаланса сопровождается знаками “+” и “–” в соответствии со следующими условиями:
    • для часов, которые идут сверх нормы, ставится знак “+”;
    • для часов, недостающих до нормы, ставится знак “–”.
  4. В выходном файле сначала перечисляются сотрудники с отрицательным дизбалансом в алфавитном порядке, затем - сотрудники с положительным дизбалансом в алфавитном порядке.
  5. Ручной ввод пути к файлу через интерактивный режим (посредством клавиатурного ввода) недопустим. Также эксплуатация программы не должна подразумевать какие-либо изменения программного кода с целью указания пути к файлам.

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

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

Синицын Тимофей Евегеньевич

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

Предоставленное решение состоит из программы на Java, предназначенной для анализа дизбаланса времени, списанного сотрудниками за неделю. Программа читает входной файл report.txt, обрабатывает данные для вычисления дизбаланса часов, списанных каждым сотрудником, и записывает результаты в выходной файл result.txt.

Основные компоненты решения:

  1. Класс Disbalance:

    • Представляет дизбаланс списанных часов для сотрудника.
    • Содержит два поля: fullName (полное имя сотрудника) и disbalance (вычисленный дизбаланс).
    • Предоставляет методы-геттеры для этих полей.
  2. Класс TimeEntry:

    • Представляет запись о списании времени сотрудником.
    • Содержит поля, такие как uuid, lastName, firstName, middleName, date и hours.
    • Включает статический метод parse для создания объекта TimeEntry из строки.
    • Предоставляет метод для получения полного имени сотрудника в формате "Фамилия И.О." и метод для получения списанных часов.
  3. Класс Main:

    • Точка входа в программу.
    • Читает входной файл для извлечения недельной нормы и списка записей о времени.
    • Вычисляет общее количество списанных часов для каждого сотрудника.
    • Вычисляет дизбаланс для каждого сотрудника и фильтрует тех, у кого значительный дизбаланс (больше 10% от недельной нормы).
    • Разделяет дизбалансы на отрицательные и положительные списки, сортирует их по именам сотрудников и записывает результаты в выходной файл.

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

Для сборки и запуска предоставленной программы на Java с использованием IntelliJ IDEA, выполните следующие шаги:

  1. Клонируйте репозиторий:

    • Клонируйте репозиторий средствами Intellij IDEA
    • or
    • Откройте терминал и выполните команду:
      git clone <URL_вашего_репозитория>
    • Перейдите в директорию проекта:
      cd <имя_репозитория>
  2. Импортируйте проект в IntelliJ IDEA:

    • Откройте IntelliJ IDEA.
    • Выберите "File > Open".
    • Выберите папку с вашим клонированным репозиторием и нажмите "ОК".
  3. Настройте главный класс:

    • Перейдите в Run > Edit Configurations.
    • Нажмите на значок + для добавления новой конфигурации и выберите "Application".
    • Назовите конфигурацию (например, "RunMain").
    • Установите "Main class" как src.Solution.Main.
    • Убедитесь, что рабочая директория установлена на корень проекта.
  4. Сборка и запуск:

    • Нажмите на значок сборки (молоток) или перейдите в Build > Build Project.
    • Запустите программу, нажав на значок запуска (зеленая стрелка) или перейдите в Run > Run 'RunMain'.

Программа прочитает файл report.txt, выполнит анализ дизбаланса и запишет результаты в файл result.txt в корневой директории проекта.

Запуск через .jar файл

В соответствии с ТЗ нужно было собрать проект поэтому так же предоставляю альтернативный вариант запуска решение

  1. Откройте папку result в Finder (или Explorer на Windows).
  2. Запустите .jar файл двойным щелчком мыши.
  3. Откройте result.txt

Сборка .jar файла

Так же можете собрать .jar самостоятельно. Снизу представлена инструкция

  1. Сборка через IntelliJ IDEA:

    • Перейдите в File > Project Structure.
    • В разделе "Artifacts" нажмите + и выберите "Jar > From modules with dependencies".
    • Выберите модуль и основной класс (например, src.Solution.Main).
    • Установите путь вывода для .jar файла (например, out/artifacts).
    • Нажмите "OK" и примените изменения.
    • Перейдите в Build > Build Artifacts и выберите ваш артефакт, затем нажмите "Build".
  2. Запуск .jar файла через командную строку:

    • Откройте терминал.
    • Перейдите в директорию, где находится .jar файл:
      cd <путь_к_jar_файлу>
    • Запустите .jar файл с помощью команды:
      java -jar имя_файла.jar

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%