Advertisement
Guest User

Untitled

a guest
Feb 10th, 2018
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.11 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.text.Collator;
  5. import java.util.*;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8. import java.util.stream.Collectors;
  9.  
  10. public class RoliTheCoder {
  11.     static class EventDatabase {
  12.         private List<Event> events;
  13.  
  14.         public EventDatabase() {
  15.             this.events = new ArrayList<>();
  16.         }
  17.  
  18.         public void addEvent(Event event) {
  19.             this.events.add(event);
  20.         }
  21.  
  22.         public boolean idExists(int eventID) {
  23.             return events.stream().anyMatch(event -> event.getEventID() == eventID);
  24.         }
  25.  
  26.         public boolean eventExists(String eventName, int eventID) {
  27.             return events.stream().anyMatch(event -> event.getEventName().equals(eventName) && event.getEventID() == eventID);
  28.         }
  29.  
  30.         public void addParticipants(List<String> participants, String eventName, int eventID) {
  31.             this.events.stream().filter(event -> event.getEventName().equals(eventName) && event.getEventID() == eventID)
  32.                     .forEach(event -> event.addParticipants(participants));
  33.         }
  34.  
  35.         public void printEvents() {
  36.             events.stream()
  37.                     .sorted((a, b) -> {
  38.                         int index = Integer.compare(b.getParticipantsCount(), a.getParticipantsCount());
  39.                         index = (index != 0) ? index : lowerBeforeUpperCaseSort.compare(a.getEventName(), b.getEventName());
  40.                         return index;
  41.                     })
  42.                     .forEach(event -> {
  43.                         System.out.println(String.format("%s - %d", event.getEventName(), event.getParticipantsCount()));
  44.                         event.printParticipants();
  45.                     });
  46.         }
  47.  
  48.         private Comparator<String> lowerBeforeUpperCaseSort = new Comparator<String>() {
  49.             Collator myCollator = Collator.getInstance();
  50.  
  51.             @Override
  52.             public int compare(String o1, String o2) {
  53.                 return myCollator.compare(o1, o2);
  54.             }
  55.         };
  56.     }
  57.  
  58.     static class Event {
  59.         private String eventName;
  60.         private int eventID;
  61.         private LinkedHashSet<String> participants;
  62.  
  63.         public Event(String eventName, int eventID, List<String> participants) {
  64.             this.eventName = eventName;
  65.             this.eventID = eventID;
  66.             this.participants = new LinkedHashSet<>();
  67.             this.participants.addAll(participants);
  68.         }
  69.  
  70.         public void addParticipants(List<String> participants) {
  71.             this.participants.addAll(participants);
  72.         }
  73.  
  74.         public String getEventName() {
  75.             return eventName;
  76.         }
  77.  
  78.         public int getEventID() {
  79.             return eventID;
  80.         }
  81.  
  82.         public int getParticipantsCount() {
  83.             return participants.size();
  84.         }
  85.  
  86.         public void printParticipants() {
  87.             participants.stream()
  88.                     .sorted((a, b) -> lowerBeforeUpperCaseSort.compare(a, b))
  89.                     .forEach(System.out::println);
  90.         }
  91.  
  92.         private Comparator<String> lowerBeforeUpperCaseSort = new Comparator<String>() {
  93.             Collator myCollator = Collator.getInstance();
  94.  
  95.             @Override
  96.             public int compare(String o1, String o2) {
  97.                 return myCollator.compare(o1, o2);
  98.             }
  99.         };
  100.  
  101.  
  102.     }
  103.  
  104.     public static void main(String[] args) throws IOException {
  105.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  106.         EventDatabase eventDatabase = new EventDatabase();
  107.         addEvents(reader, eventDatabase);
  108.         eventDatabase.printEvents();
  109.     }
  110.  
  111.     private static void addEvents(BufferedReader reader, EventDatabase eventDatabase) throws IOException {
  112.         Pattern pattern = Pattern.compile("(?<id>\\d+)\\s*#(?<event>\\w+)\\s*(?<participants>(?:@[a-zA-Z\\d'-]+\\s*)*)$");
  113.         while (true) {
  114.             String input = reader.readLine();
  115.             if ("Time for Code".equals(input)) {
  116.                 break;
  117.             }
  118.             Matcher matcher = pattern.matcher(input);
  119.             if (matcher.find()) {
  120.                 int id = Integer.valueOf(matcher.group("id"));
  121.                 String eventName = matcher.group("event").trim();
  122.                 List<String> participants = getParticipants(matcher);
  123.  
  124.                 if (! eventDatabase.idExists(id)) {
  125.                     Event event = new Event(eventName, id, participants);
  126.                     eventDatabase.addEvent(event);
  127.                 } else if (eventDatabase.eventExists(eventName, id)) {
  128.                     eventDatabase.addParticipants(participants, eventName, id);
  129.                 }
  130.  
  131.             }
  132.  
  133.         }
  134.     }
  135.  
  136.     private static ArrayList<String> getParticipants(Matcher matcher) {
  137.         return Arrays.stream(matcher.group("participants").split("\\s+"))
  138.                 .map(String::trim)
  139.                 .filter(e -> ! e.equals(""))
  140.                 .collect(Collectors.toCollection(ArrayList::new));
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement