Advertisement
Spocoman

04. Star Enigma

Apr 21st, 2023
1,748
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.19 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Text.RegularExpressions;
  5. using System.Collections.Generic;
  6.  
  7. namespace StarEnigma
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Regex pattern = new Regex(@"@(?<name>[A-Za-z]+)[^@\-!:>]*:(?<population>\d+)[^@\-!:>]*!(?<type>A|D)![^@\-!:>]*->(?<soldiers>\d+)");
  14.             var attackedPlanets = new List<string>();
  15.             var destroyedPlanets = new List<string>();
  16.  
  17.             int countPlanets = int.Parse(Console.ReadLine());
  18.  
  19.             for (int i = 0; i < countPlanets; i++)
  20.             {
  21.                 string message = Console.ReadLine();
  22.  
  23.                 int starLen = new Regex(@"[STARstar]")
  24.                     .Matches(message)
  25.                     .Select(x => x.Value)
  26.                     .Count();
  27.  
  28.                 var decodedMessage = new StringBuilder();
  29.  
  30.                 for (int j = 0; j < message.Length; j++)
  31.                 {
  32.                     decodedMessage.Append((char)(message[j] - starLen));
  33.                 }
  34.  
  35.                 if (pattern.IsMatch(decodedMessage.ToString()))
  36.                 {
  37.                     var planet = pattern.Match(decodedMessage.ToString());
  38.  
  39.                     if (planet.Groups["type"].Value == "A")
  40.                     {
  41.                         attackedPlanets.Add(planet.Groups["name"].Value);
  42.                     }
  43.                     else
  44.                     {
  45.                         destroyedPlanets.Add(planet.Groups["name"].Value);
  46.                     }
  47.                 }
  48.             }
  49.  
  50.             Console.WriteLine($"Attacked planets: {(attackedPlanets.Count() > 0 ? attackedPlanets.Count() : 0)}");
  51.  
  52.             attackedPlanets.Sort();
  53.  
  54.             foreach (var planetName in attackedPlanets)
  55.             {
  56.                 Console.WriteLine($"-> {planetName}");
  57.             }
  58.  
  59.             Console.WriteLine($"Destroyed planets: {(destroyedPlanets.Count() > 0 ? destroyedPlanets.Count() : 0)}");
  60.  
  61.             destroyedPlanets.Sort();
  62.  
  63.             foreach (var planetName in destroyedPlanets)
  64.             {
  65.                 Console.WriteLine($"-> {planetName}");
  66.             }
  67.         }
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement