Advertisement
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_04 {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- //1. decrypt message
- //1.1 count of letters [s, t, a, r]
- //1.2 decrypt
- //2. извеличаме данни: planet, population, attack, soldierCount
- int n = Integer.parseInt(scanner.nextLine());
- String regex = "@(?<planet>[A-Za-z]+)[^@\\-!:>]*:(?<population>[0-9]+)[^@\\-!:>]*!(?<attack>[AD])![^@\\-!:>]*->(?<soldierCount>[0-9]+)";
- Pattern pattern = Pattern.compile(regex);
- List<String> attackers = new ArrayList<>(); //атакуващи планети
- List<String> destroyed = new ArrayList<>(); //разрушени планети
- for (int i = 1; i <= n; i++) {
- String encryptMessage = scanner.nextLine();
- int countLetters = getSpecialLetters(encryptMessage);
- String decryptedMessage = getDecryptedMessage(encryptMessage, countLetters);
- //PQ@Alderaa1:30000!A!->20000
- Matcher matcher = pattern.matcher(decryptedMessage);
- if(matcher.find()) {
- String planet = matcher.group("planet");
- int population = Integer.parseInt(matcher.group("population"));
- String attackType = matcher.group("attack");
- //A -> attackers
- //D -> destroyed
- if(attackType.equals("A")) {
- attackers.add(planet);
- } else if (attackType.equals("D")){
- destroyed.add(planet);
- }
- int soldierCount = Integer.parseInt(matcher.group("soldierCount"));
- }
- }
- //2 списъка с планети: атакуващи + унищожени
- System.out.println("Attacked planets: " + attackers.size());
- Collections.sort(attackers);
- attackers.forEach(planet -> System.out.println("-> " + planet));
- System.out.println("Destroyed planets: " + destroyed.size());
- Collections.sort(destroyed);
- destroyed.forEach(planet -> System.out.println("-> " + planet));
- }
- private static String getDecryptedMessage(String encryptMessage, int countLetters) {
- StringBuilder decryptMessage = new StringBuilder();
- //encrypt: STCDoghudd4=63333$D$0A53333
- //decrypt: PQ@Alderaa1:30000!A!->20000
- for (int i = 0; i < encryptMessage.length(); i++) {
- char currentSymbol = encryptMessage.charAt(i);
- decryptMessage.append((char)(currentSymbol - countLetters));
- }
- return decryptMessage.toString();
- }
- private static int getSpecialLetters(String encryptMessage) {
- //SsTtAaRr -> s t a r
- //STCDoghudd4=63333$D$0A53333 -> stcdoghudd4=63333$d$0a53333
- int counter = 0;
- String lowerCaseMessage = encryptMessage.toLowerCase();
- for (int i = 0; i < lowerCaseMessage.length(); i++) {
- char currentSymbol = lowerCaseMessage.charAt(i);
- if (currentSymbol == 's' ||
- currentSymbol == 'a' ||
- currentSymbol == 't' ||
- currentSymbol == 'r') {
- counter++;
- }
- }
- return counter;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement