Lyubohd

04. Star Enigma

Mar 19th, 2020
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.92 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Scanner;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. public class Main {
  8.     public static void main(String[] args) {
  9.         Scanner scan = new Scanner(System.in);
  10.  
  11.         String reg = "[STARstar]"; // по условие се изисква case insensitive, затива са написани веднъж с главни и веднъж с малки букви
  12.         Pattern pat = Pattern.compile(reg);
  13.  
  14.         int n = Integer.parseInt(scan.nextLine()); // брой редове
  15.  
  16.         List<String> attack = new ArrayList<>(); // атакувани планети
  17.         List<String> destroyed = new ArrayList<>(); // унищожени планети
  18.  
  19.         for (int i = 0; i < n; i++) {
  20.             String input = scan.nextLine();
  21.             Matcher match = pat.matcher(input);
  22.  
  23.             int count = 0;
  24.  
  25.             while (match.find()) {
  26.                 count++; // броим колко букви имаме от STAR/star
  27.             }
  28.  
  29.             String decrypted = "";
  30.             for (int j = 0; j < input.length(); j++) {
  31.                 char symbol = (char) (input.charAt(j) - count); // от всеки символ изваждаме броя на буквите от от STAR
  32.                 decrypted += symbol; // новополученият символ го добавяме към новият String
  33.             }
  34.  
  35.             String regex = "@(?<name>[A-Za-z]+)(?:[^@:!>\\-]*):(?<population>[\\d]+)(?:[^@:!>\\-]*)!(?<type>[AD])!(?:[^@:\\-!>]*)->(?<soldiers>\\d+)";
  36.             Pattern pattern = Pattern.compile(regex);
  37.             Matcher matcher = pattern.matcher(decrypted);
  38.  
  39.             while (matcher.find()) { // докато има съвпадени по декрептираното съобщение
  40.                 String type = matcher.group("type"); // взимаме типа от съобщението
  41.                 if (type.equals("A")) { // при атака
  42.                     attack.add(matcher.group("name")); // добавяме името към атакуваните
  43.                 } else { // при унищожаване
  44.                     destroyed.add(matcher.group("name")); // добавяме името към унищожените
  45.                 }
  46.             }
  47.         }
  48.  
  49.         System.out.println(String.format("Attacked planets: %d", attack.size())); // принтираме атакуваните подредени по азбучен ре
  50.         attack.stream().sorted().forEach(e -> {
  51.             System.out.println(String.format("-> %s", e));
  52.         });
  53.  
  54.         System.out.println(String.format("Destroyed planets: %d", destroyed.size())); // принтираме унищожените по азбучен ред
  55.         destroyed.stream().sorted().forEach(e -> {
  56.             System.out.println(String.format("-> %s", e));
  57.         });
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment