Advertisement
Ligh7_of_H3av3n

12. Сръбско Unleashed

May 21st, 2024
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.91 KB | None | 0 0
  1. package Uprajnenie;
  2.  
  3. import java.util.Collections;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6. import java.util.Scanner;
  7.  
  8.  
  9. public class SerbianUnleashed {
  10.     public static void main(String[] args) {
  11.         Scanner scanner = new Scanner(System.in);
  12.  
  13.  
  14.         // Initialize a LinkedHashMap to store venue information with nested singer information
  15.         LinkedHashMap<String, LinkedHashMap<String, Long>> venues = new LinkedHashMap<>();
  16.  
  17.         // Process input until "End" command is encountered
  18.         String command = scanner.nextLine();
  19.         while (!command.equals("End")) {
  20.             // Check if the input command is valid
  21.             if (inputIsValid(command)) {
  22.                 // Extract data from the input command
  23.                 String[] extractedData = extractData(command);
  24.                 String venue = extractedData[1];
  25.                 String singer = extractedData[0];
  26.                 int ticketPrice = Integer.parseInt(extractedData[2]);
  27.                 int ticketCount = Integer.parseInt(extractedData[3]);
  28.                 long concertAmount = ticketPrice * ticketCount;
  29.  
  30.                 // Update venue information
  31.                 if (!venues.containsKey(venue)) {
  32.                     LinkedHashMap<String, Long> singers = new LinkedHashMap<>();
  33.                     singers.put(singer, concertAmount);
  34.                     venues.put(venue, singers);
  35.                 } else if (!venues.get(venue).containsKey(singer)) {
  36.                     venues.get(venue).put(singer, concertAmount);
  37.                 } else {
  38.                     venues.get(venue).put(singer, venues.get(venue).get(singer) + concertAmount);
  39.                 }
  40.             }
  41.             command = scanner.nextLine();
  42.         }
  43.  
  44.         // Print aggregated data for each venue
  45.         venues.entrySet().forEach(venue ->{
  46.             System.out.println(venue.getKey());
  47.             venues.get(venue.getKey()).entrySet().stream()
  48.                     .sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
  49.                     .forEach(singer -> System.out.println("#  " + singer.getKey() + " -> " + singer.getValue()));
  50.         });
  51.     }
  52.  
  53.     // Extract data from the input command
  54.     private static String[] extractData(String command) {
  55.         String[] result = new String[4];
  56.         String[] tokens = command.split(" @");
  57.         String singer = tokens[0];
  58.         result[0] = singer;
  59.         String remainingData = tokens[1];
  60.         String[] remainingTokens = remainingData.split(" ");
  61.  
  62.         // Determine the venue and parse ticket price and count
  63.         if (remainingTokens.length == 3) {
  64.             result[1] = remainingTokens[0];
  65.             result[2] = remainingTokens[1];
  66.             result[3] = remainingTokens[2];
  67.         } else {
  68.             StringBuilder venue = new StringBuilder();
  69.             for (int i = 0; i < remainingTokens.length - 3; i++) {
  70.                 venue.append(remainingTokens[i]).append(" ");
  71.             }
  72.             venue.append(remainingTokens[remainingTokens.length - 3]);
  73.             result[1] = venue.toString();
  74.             result[2] = remainingTokens[remainingTokens.length - 2];
  75.             result[3] = remainingTokens[remainingTokens.length - 1];
  76.         }
  77.         return result;
  78.     }
  79.  
  80.     // Validate input command format
  81.     private static boolean inputIsValid(String command) {
  82.         String[] tokens = command.split(" @");
  83.         if (tokens.length != 2) {
  84.             return false;
  85.         }
  86.         String[] remainingTokens = tokens[1].split(" ");
  87.         try {
  88.             int ticketPrice = Integer.parseInt(remainingTokens[remainingTokens.length - 1]);
  89.             int ticketCount = Integer.parseInt(remainingTokens[remainingTokens.length - 2]);
  90.             long concertAmount = ticketPrice * ticketCount;
  91.         } catch (NumberFormatException e) {
  92.             return false;
  93.         }
  94.         return remainingTokens.length >= 3;
  95.     }
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement