Didart

Star Enigma

Nov 23rd, 2021
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.72 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4.  
  5. public class StarEnigma {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.  
  9.         int countMessages = Integer.parseInt(scanner.nextLine());
  10.  
  11.         String regex = "@(?<planetName>[A-Za-z]+)[^@!:>-]*:(?<population>[0-9]+)[^@!:>-]*!(?<attack>[AD])![^@!:>-]*->(?<soldierCount>[0-9]+)";
  12.         Pattern pattern = Pattern.compile(regex);
  13.  
  14.         List<String> attackersPlanets = new ArrayList<>();
  15.         List<String> destroyedPlanets = new ArrayList<>();
  16.  
  17.         for (int messageCount = 1; messageCount <= countMessages; messageCount++) {
  18.             String encryptedMessage = scanner.nextLine();
  19.  
  20.             String decryptedMessage = getDecryptedMessage(encryptedMessage);
  21.             Matcher matcher = pattern.matcher(decryptedMessage);
  22.  
  23.             if (matcher.find()) {
  24.                 String planetName = matcher.group("planetName");
  25.                 //    int planetPopulation = Integer.parseInt(matcher.group("planetPopulation"));
  26.                 String attackType = matcher.group("attack");
  27.                 //    int soldierCount = Integer.parseInt(matcher.group("soldierCount"));
  28.  
  29.                 if (attackType.equals("A")) {
  30.                     attackersPlanets.add(planetName);
  31.                 } else if (attackType.equals("D")) {
  32.                     destroyedPlanets.add(planetName);
  33.                 }
  34.             }
  35.         }
  36.         System.out.println("Attacked planets: " + attackersPlanets.size());
  37.         Collections.sort(attackersPlanets);
  38.         attackersPlanets.forEach(planet -> System.out.println("-> " + planet));
  39.  
  40.         System.out.println("Destroyed planets: " + destroyedPlanets.size());
  41.         Collections.sort(destroyedPlanets);
  42.         destroyedPlanets.forEach(planet -> System.out.println("-> " + planet));
  43.     }
  44.  
  45.     private static String getDecryptedMessage(String encryptedMessage) {
  46.         int countLetters = getSpecialLetterCounts(encryptedMessage);
  47.         StringBuilder decryptedMessage = new StringBuilder();
  48.  
  49.         for (char symbol : encryptedMessage.toCharArray()) {
  50.             char newSymbol = (char) (symbol - countLetters);
  51.             decryptedMessage.append(newSymbol);
  52.         }
  53.         return decryptedMessage.toString();
  54.     }
  55.  
  56.     private static int getSpecialLetterCounts(String encryptedMessage) {
  57.         int counter = 0;
  58.         for (char symbol : encryptedMessage
  59.                 .toLowerCase(Locale.ROOT)
  60.                 .toCharArray()) {
  61.             if (symbol == 's' || symbol == 'a'
  62.                     || symbol == 't' || symbol == 'r') {
  63.                 counter++;
  64.             }
  65.         }
  66.         return counter;
  67.     }
  68. }
  69.  
Advertisement
Add Comment
Please, Sign In to add comment