Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class StarEnigma {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int countMessages = Integer.parseInt(scanner.nextLine());
- String regex = "@(?<planetName>[A-Za-z]+)[^@!:>-]*:(?<population>[0-9]+)[^@!:>-]*!(?<attack>[AD])![^@!:>-]*->(?<soldierCount>[0-9]+)";
- Pattern pattern = Pattern.compile(regex);
- List<String> attackersPlanets = new ArrayList<>();
- List<String> destroyedPlanets = new ArrayList<>();
- for (int messageCount = 1; messageCount <= countMessages; messageCount++) {
- String encryptedMessage = scanner.nextLine();
- String decryptedMessage = getDecryptedMessage(encryptedMessage);
- Matcher matcher = pattern.matcher(decryptedMessage);
- if (matcher.find()) {
- String planetName = matcher.group("planetName");
- // int planetPopulation = Integer.parseInt(matcher.group("planetPopulation"));
- String attackType = matcher.group("attack");
- // int soldierCount = Integer.parseInt(matcher.group("soldierCount"));
- if (attackType.equals("A")) {
- attackersPlanets.add(planetName);
- } else if (attackType.equals("D")) {
- destroyedPlanets.add(planetName);
- }
- }
- }
- System.out.println("Attacked planets: " + attackersPlanets.size());
- Collections.sort(attackersPlanets);
- attackersPlanets.forEach(planet -> System.out.println("-> " + planet));
- System.out.println("Destroyed planets: " + destroyedPlanets.size());
- Collections.sort(destroyedPlanets);
- destroyedPlanets.forEach(planet -> System.out.println("-> " + planet));
- }
- private static String getDecryptedMessage(String encryptedMessage) {
- int countLetters = getSpecialLetterCounts(encryptedMessage);
- StringBuilder decryptedMessage = new StringBuilder();
- for (char symbol : encryptedMessage.toCharArray()) {
- char newSymbol = (char) (symbol - countLetters);
- decryptedMessage.append(newSymbol);
- }
- return decryptedMessage.toString();
- }
- private static int getSpecialLetterCounts(String encryptedMessage) {
- int counter = 0;
- for (char symbol : encryptedMessage
- .toLowerCase(Locale.ROOT)
- .toCharArray()) {
- if (symbol == 's' || symbol == 'a'
- || symbol == 't' || symbol == 'r') {
- counter++;
- }
- }
- return counter;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment