diff --git a/src/main/java/com/algos/hh/easy/AgeProcessor.java b/src/main/java/com/algos/hh/easy/AgeProcessor.java new file mode 100644 index 0000000..65abb1c --- /dev/null +++ b/src/main/java/com/algos/hh/easy/AgeProcessor.java @@ -0,0 +1,58 @@ +package com.algos.hh.easy; + +import java.util.Arrays; +import java.util.List; + +//Возраст сотрудников +// Вы работаете над модулем внутрикорпоративной системы учета данных сотрудников компании. Программа должна: +// 1. Найти сотрудника с минимальным возрастом; +// 2. Вычислить медианный возраст всех сотрудников; +// 3. Найти сотрудника с максимальным возрастом. +// Медиана — число, которое находится в середине этого набора, если его упорядочить по возрастанию. Если набор чисел четный, то берется среднее между двумя средними числами и округляется до целого. +// Формат ввода +// Одна строка — данные сотрудников. Данные включают имя, возраст и отдел, разделенные запятой, без пробелов. Информация о каждом сотруднике разделена через точку с запятой. +// Количество сотрудников — от 2 до 100. +// Формат вывода +// Одна строка содержит три целых числа, разделенные пробелом: минимальный возраст, медианный возраст и максимальный возраст. +// Пример 1 +// Входные данные: +// Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR +// Выходные данные: +// 24 30 45 +// Пример 2 +// Входные данные: +// Павел,28,Инженер;Елена,34,Маркетинг +// Выходные данные: +// 28 31 34 +public class AgeProcessor { + + public static void main(String[] args) { + String input = "Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR"; + String input2 = "Павел,28,Инженер;Елена,34,Маркетинг"; + System.out.println(processEmployeeData(input)); + System.out.println(processEmployeeData(input2)); + } + + public static String processEmployeeData(String input) { + + String[] employees = input.split(";"); + List ages = Arrays.stream(employees) + .map(s -> s.split(",")) + .filter(parts -> parts.length >= 2) + .map(e -> Integer.parseInt(e[1])) + .sorted() + .toList(); + + if (ages.isEmpty()) { + return "0 0 0"; + } + + int minAge = ages.get(0); + int maxAge = ages.get(ages.size() - 1); + int middleOfList = ages.size() / 2; + int medAge = ages.size() % 2 != 0 ? ages.get(middleOfList) : + Math.round((ages.get(middleOfList) + ages.get(middleOfList - 1)) / 2f); + + return minAge + " " + medAge + " " + maxAge; + } +}