Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.90 KB | None | 0 0
  1. package DemoExams;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.*;
  7.  
  8. public class Hospital {
  9.     public static void main(String[] args) throws IOException {
  10.         BufferedReader reader = new BufferedReader
  11.                 (new InputStreamReader(System.in));
  12.  
  13.         Map<String, Set<String>> doctors = new LinkedHashMap<>();
  14.         Map<String, String[][]> roomsInDepartment = new LinkedHashMap<>();
  15.         List<String> patients = new ArrayList<>();
  16.  
  17.         String input;
  18.  
  19.         while (!"Output".equals(input = reader.readLine())) {
  20.             String[] data = input.split("\\s+");
  21.  
  22.             String department = data[0];
  23.             String doctor = data[1] + " " + data[2];
  24.             String patient = data[3];
  25.  
  26.             roomsInDepartment.putIfAbsent(department, new String[20][3]);
  27.  
  28.             boolean addedPatient = addPatientsToRooms(roomsInDepartment, department, patient);
  29.  
  30.             addPatientInRegistry(doctors, addedPatient, doctor, patient);
  31.         }
  32.         while (!"End".equals(input = reader.readLine())) {
  33.             String[] data = input.split("\\s+");
  34.             patients.clear();
  35.  
  36.             printOutputByCondition(doctors, roomsInDepartment, patients, data);
  37.         }
  38.     }
  39.  
  40.     private static boolean addPatientsToRooms(Map<String, String[][]> roomsInDepartment, String department, String patient) {
  41.         boolean bool = false;
  42.         for (int room = 0; room < 20; room++) {
  43.             for (int bed = 0; bed < 3; bed++) {
  44.                 if (roomsInDepartment.get(department)[room][bed] == null) {
  45.                     roomsInDepartment.get(department)[room][bed] = patient;
  46.                     bool = true;
  47.                     break;
  48.                 }
  49.             }
  50.             if (bool) {
  51.                 break;
  52.             }
  53.         }
  54.         return bool;
  55.     }
  56.  
  57.     private static void addPatientInRegistry(Map<String, Set<String>> doctors, boolean addedPatient, String doctor, String patient) {
  58.         if (addedPatient) {
  59.             doctors.putIfAbsent(doctor, new TreeSet<>());
  60.             doctors.get(doctor).add(patient);
  61.         }
  62.     }
  63.  
  64.     private static void printOutputByCondition(Map<String, Set<String>> doctors, Map<String, String[][]> roomsInDepartment, List<String> patients, String[] data) {
  65.         if (data.length > 1) {
  66.             if (Character.isDigit(data[1].charAt(0))) {
  67.                 printRoom(roomsInDepartment, patients, data);
  68.             } else {
  69.                 printPatientsByDoctor(doctors, data);
  70.             }
  71.         } else {
  72.             printDepartment(roomsInDepartment, data[0]);
  73.         }
  74.     }
  75.  
  76.     private static void printDepartment(Map<String, String[][]> roomsInDepartment, String datum) {
  77.         if (roomsInDepartment.containsKey(datum)) {
  78.             for (int room = 0; room < 20; room++) {
  79.                 for (int bed = 0; bed < 3; bed++) {
  80.                     if (roomsInDepartment.get(datum)[room][bed] != null) {
  81.                         System.out.println(roomsInDepartment.get(datum)[room][bed]);
  82.                     }
  83.                 }
  84.             }
  85.         }
  86.     }
  87.  
  88.     private static void printPatientsByDoctor(Map<String, Set<String>> doctors, String[] data) {
  89.         String key = data[0] + " " + data[1];
  90.  
  91.         if (doctors.containsKey(key)) {
  92.             doctors.get(key).forEach(System.out::println);
  93.         }
  94.     }
  95.  
  96.     private static void printRoom(Map<String, String[][]> roomsInDepartment, List<String> patients, String[] data) {
  97.         int room = Integer.valueOf(data[1]) - 1;
  98.         for (int bed = 0; bed < roomsInDepartment.get(data[0])[room].length; bed++) {
  99.             if (roomsInDepartment.get(data[0])[room][bed] != null) {
  100.                 patients.add(roomsInDepartment.get(data[0])[room][bed]);
  101.             }
  102.         }
  103.         patients.stream().sorted().forEach(System.out::println);
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement