Професионална програма
Loading...
+ Нов въпрос
Ankoun1 avatar Ankoun1 5 Точки

C# Exercise: Regular Expressions -4.*Star Enigma

здравейте,имате ли идея къде е пропуска в решението - 80т.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace regex_demos
{
    class Program
    {
        static void Main(string[] args)
        {

            int n = int.Parse(Console.ReadLine());
            Dictionary<string, List<string>> negativPlanets = new Dictionary<string, List<string>> { { "A", new List<string>() },{ "D", new List<string>() } };
            for (int i = 0; i < n; i++)
            {
                string command = Console.ReadLine();
                MatchCollection symbols = Regex.Matches(command, @"[starSTAR]");
                StringBuilder sb = new StringBuilder(); 
                foreach(char symbol in command)
                {
                    sb.Append((char)(symbol - symbols.Count));
                }
                string command1 = sb.ToString();
                
                string patern = @"@([a-zA-z]+)[^@|:>-]*:\d+[^@|:>-]*!([AD])![^@|:>-]*->\d+";
                Match element = Regex.Match(command1, patern);
                if (element.Success)
                {
                    string planet = element.Groups[1].Value.ToString();//за подсигуряване тостринг
                    string command2 = element.Groups[2].Value.ToString();
                  
                    negativPlanets[command2].Add(planet);               
                    
                }
            }
           
            foreach (var planWar in negativPlanets)
            {
                string s = "Destroyed";
                if (planWar.Key == "A")
                {

                    s = "Attacked".ToString();
                }
                
                Console.WriteLine($"{s} planets: {planWar.Value.Count}");
                foreach (string planetWar in planWar.Value.OrderBy(x => x))
                {
                    Console.WriteLine("-> " + planetWar);
                }
            }
    }
}
}

един символ обърква патерна и трябва "!" вместо "|"

може ли да се използва Select() или нещо друго вместо някой от циклите

Тагове:
0
C# Fundamentals 03/08/2020 12:16:14
Ankoun1 avatar Ankoun1 5 Точки

как да се намалят циклите в 5 зад.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace regex_demos
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] demons = Console.ReadLine().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();

            foreach(string demon in demons.OrderBy(x => x))
            {
               MatchCollection nameDemon = Regex.Matches(demon, @"[^\d+-.*\/]");
               MatchCollection digits = Regex.Matches(demon, @"-?\d+(\.\d+)?");
              
               
                int health = 0;               
               foreach(Match symbol in nameDemon)
               {
                    health += char.Parse(symbol.Value);                 
               }

                double damage = 0;               
               foreach (Match symbol in digits)
               {
                    damage += double.Parse(symbol.Value);
                    
               }
               foreach(char symbol in demon)
               {
                    if(symbol == '/')
                    {
                        damage /= 2;
                    }
                    else if(symbol == '*')
                    {
                        damage *= 2;
                    }
                  
               }
               
                Console.WriteLine($"{demon} - {health} health, {damage:f2} damage");
            }
           
        }
    }
}

 

Time: 0.056 s

0
02/08/2020 13:11:21
Ankoun1 avatar Ankoun1 5 Точки

може да се използва Select() вместо цикли

 

  int health = nameDemon.Select(x =>(int)char.Parse(x.ToString())).Sum();                
                             
                  double damage = digits.Select(x =>double.Parse(x.ToString())).Sum();

 

 

Time: 0.093 s

0
02/08/2020 13:12:31