Advertisement
Guest User

Untitled

a guest
Mar 7th, 2018
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.TreeSet;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. public class Ex03StarEnigma {
  9.     private static final String REGEX_LETTERS = "[star]";
  10.     private static final String REGEX_MSG = "@(?<planet>[A-Za-z]+)[^@\\-!:>]*:(?<population>[0-9]+)[^@\\-!:>]*!(?<attack>(A|D))![^@\\-!:>]*->(?<soldierCount>[0-9]+)";
  11.     private static Pattern letterPattern = Pattern.compile(REGEX_LETTERS);
  12.     private static Pattern msgPattern = Pattern.compile(REGEX_MSG);
  13.  
  14.     public static void main(String[] args) throws IOException {
  15.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  16.         Integer lines = Integer.valueOf(reader.readLine());
  17.         TreeSet<String> attacked = new TreeSet<>();
  18.         TreeSet<String> destroyed = new TreeSet<>();
  19.  
  20.         for (int i = 0; i < lines; i++) {
  21.             String input = reader.readLine();
  22.             Matcher letterMatcher = letterPattern.matcher(input.toLowerCase());
  23.             Integer key = 0;
  24.             while (letterMatcher.find()) {
  25.                 key++;
  26.             }
  27.  
  28.             String message = mapInput(input, key);
  29.             Matcher msgMatcher = msgPattern.matcher(message);
  30.  
  31.             if (msgMatcher.find()) {
  32.                 String planetName = msgMatcher.group("planet");
  33.                 String attackType = msgMatcher.group("attack");
  34.  
  35.                 switch (attackType) {
  36.                     case "A":
  37.                         attacked.add(planetName);
  38.                         break;
  39.                     case "D":
  40.                         destroyed.add(planetName);
  41.                         break;
  42.                 }
  43.             }
  44.         }
  45.  
  46.         System.out.println(String.format("Attacked planets: %d", attacked.size()));
  47.         attacked.forEach(p -> System.out.println(String.format("-> %s", p)));
  48.         System.out.println(String.format("Destroyed planets: %d", destroyed.size()));
  49.         destroyed.forEach(p -> System.out.println(String.format("-> %s", p)));
  50.     }
  51.  
  52.     private static String mapInput(String input, Integer key) {
  53.         StringBuilder word = new StringBuilder();
  54.         char[] letters = input.toCharArray();
  55.         for (int i = 0; i < letters.length; i++) {
  56.             word.append(String.format("%s", (char) (letters[i] - key)));
  57.  
  58.         }
  59.         return word.toString();
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement