From acb617b4605c6ccf7a5bbeeb3dcc0b03aea6d11e Mon Sep 17 00:00:00 2001 From: Leonid Date: Sat, 12 Apr 2025 12:27:37 +0300 Subject: [PATCH] =?UTF-8?q?=20=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=203-=D0=B5=D0=B9=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20easy?= =?UTF-8?q?=20=D1=81=20HH.=20=D0=9D=D0=B0=D1=85=D0=BE=D0=B6=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE,=20=D0=BC=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8?= =?UTF-8?q?=20=D0=BC=D0=B5=D0=B4=D0=B8=D0=B0=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D1=80=D0=B0=D1=81=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D1=82=D1=80=D1=83=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/algos/hh/easy/AgeProcessor.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/com/algos/hh/easy/AgeProcessor.java 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; + } +}