LardaX

SrabskoUnleashed

Jan 26th, 2017
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.15 KB | None | 0 0
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. public class SrabskoUnleashed {
  8.     public static void main(String[] args) {
  9.         Scanner scanner = new Scanner(System.in);
  10.         Map<String, LinkedHashMap<String, Long>> venues = new LinkedHashMap<>();
  11.  
  12.         String regex = "^(?<singer>\\w+(\\s\\w+)*?) @(?<venue>\\w+(\\s\\w+)*?)\\s(?<price>\\d+)\\s(?<count>\\d+)$";
  13.         Pattern pattern = Pattern.compile(regex);
  14.  
  15.         String input = scanner.nextLine();
  16.  
  17.         while (!"End".equals(input)) {
  18.             Matcher matcher = pattern.matcher(input);
  19.  
  20.             if (matcher.find()) {
  21.                 String venue = matcher.group("venue");
  22.                 String singer = matcher.group("singer");
  23.                 int ticketPrice = Integer.parseInt(matcher.group("price"));
  24.                 long ticketCount = Long.parseLong(matcher.group("count"));
  25.                 long profit = ticketCount * ticketPrice;
  26.  
  27.                 insertVenue(venues, venue);
  28.                 insertSingerAndProfit(venues, venue, singer, profit);
  29.             }
  30.  
  31.             input = scanner.nextLine();
  32.         }
  33.  
  34.         for (String venue : venues.keySet()) {
  35.             System.out.println(venue);
  36.  
  37.             venues.get(venue).entrySet().stream()
  38.                     .sorted(Map.Entry.comparingByValue(((a, b) -> b.compareTo(a))))
  39.                     .forEach(entry -> {
  40.                         System.out.printf("#  %s -> %d%n", entry.getKey(), entry.getValue());
  41.                     });
  42.         }
  43.     }
  44.  
  45.     private static void insertSingerAndProfit(Map<String, LinkedHashMap<String, Long>> venues, String venue, String singer, long profit) {
  46.         if (!venues.get(venue).containsKey(singer)) {
  47.             venues.get(venue).put(singer, 0L);
  48.         }
  49.         venues.get(venue).put(singer, venues.get(venue).get(singer) + profit);
  50.     }
  51.  
  52.     private static void insertVenue(Map<String, LinkedHashMap<String, Long>> venues, String venue) {
  53.         if (!venues.containsKey(venue)) {
  54.             venues.put(venue, new LinkedHashMap<>());
  55.         }
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment