Loading...
Ankoun1 avatar Ankoun1 18 Точки

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 18 Точки

как да се намалят циклите в 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 18 Точки

може да се използва 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.