Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package DemoExams;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.*;
- public class Hospital {
- public static void main(String[] args) throws IOException {
- BufferedReader reader = new BufferedReader
- (new InputStreamReader(System.in));
- Map<String, Set<String>> doctors = new LinkedHashMap<>();
- Map<String, String[][]> roomsInDepartment = new LinkedHashMap<>();
- List<String> patients = new ArrayList<>();
- String input;
- while (!"Output".equals(input = reader.readLine())) {
- String[] data = input.split("\\s+");
- String department = data[0];
- String doctor = data[1] + " " + data[2];
- String patient = data[3];
- roomsInDepartment.putIfAbsent(department, new String[20][3]);
- boolean addedPatient = addPatientsToRooms(roomsInDepartment, department, patient);
- addPatientInRegistry(doctors, addedPatient, doctor, patient);
- }
- while (!"End".equals(input = reader.readLine())) {
- String[] data = input.split("\\s+");
- patients.clear();
- printOutputByCondition(doctors, roomsInDepartment, patients, data);
- }
- }
- private static boolean addPatientsToRooms(Map<String, String[][]> roomsInDepartment, String department, String patient) {
- boolean bool = false;
- for (int room = 0; room < 20; room++) {
- for (int bed = 0; bed < 3; bed++) {
- if (roomsInDepartment.get(department)[room][bed] == null) {
- roomsInDepartment.get(department)[room][bed] = patient;
- bool = true;
- break;
- }
- }
- if (bool) {
- break;
- }
- }
- return bool;
- }
- private static void addPatientInRegistry(Map<String, Set<String>> doctors, boolean addedPatient, String doctor, String patient) {
- if (addedPatient) {
- doctors.putIfAbsent(doctor, new TreeSet<>());
- doctors.get(doctor).add(patient);
- }
- }
- private static void printOutputByCondition(Map<String, Set<String>> doctors, Map<String, String[][]> roomsInDepartment, List<String> patients, String[] data) {
- if (data.length > 1) {
- if (Character.isDigit(data[1].charAt(0))) {
- printRoom(roomsInDepartment, patients, data);
- } else {
- printPatientsByDoctor(doctors, data);
- }
- } else {
- printDepartment(roomsInDepartment, data[0]);
- }
- }
- private static void printDepartment(Map<String, String[][]> roomsInDepartment, String datum) {
- if (roomsInDepartment.containsKey(datum)) {
- for (int room = 0; room < 20; room++) {
- for (int bed = 0; bed < 3; bed++) {
- if (roomsInDepartment.get(datum)[room][bed] != null) {
- System.out.println(roomsInDepartment.get(datum)[room][bed]);
- }
- }
- }
- }
- }
- private static void printPatientsByDoctor(Map<String, Set<String>> doctors, String[] data) {
- String key = data[0] + " " + data[1];
- if (doctors.containsKey(key)) {
- doctors.get(key).forEach(System.out::println);
- }
- }
- private static void printRoom(Map<String, String[][]> roomsInDepartment, List<String> patients, String[] data) {
- int room = Integer.valueOf(data[1]) - 1;
- for (int bed = 0; bed < roomsInDepartment.get(data[0])[room].length; bed++) {
- if (roomsInDepartment.get(data[0])[room][bed] != null) {
- patients.add(roomsInDepartment.get(data[0])[room][bed]);
- }
- }
- patients.stream().sorted().forEach(System.out::println);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement