Ejemplo n.º 1
0
        public static void Main(string[] args)
        {
            char[] separator = new char[] { ' ', ',' };
            try
            {
                string[] demonNames = Console.ReadLine().Split(separator, StringSplitOptions.RemoveEmptyEntries);
                SortedDictionary <string, Demon> demonsList = new SortedDictionary <string, Demon>();

                foreach (string demon in demonNames)
                {
                    Demon demonInfo = new Demon();
                    demonInfo.Name   = demon;
                    demonInfo.Health = GetHealth(demon);
                    double   damage   = GetDamageBase(demon);
                    double[] changers = GetSpecials(demon);
                    demonInfo.Damage   = GetFullDamage(damage, changers);
                    demonsList [demon] = demonInfo;
                }
                foreach (KeyValuePair <string, Demon> demonInfo in demonsList)
                {
                    Console.WriteLine($"{demonInfo.Value.Name} " +
                                      $"- {demonInfo.Value.Health} health, {demonInfo.Value.Damage:f2} damage");
                }
            }
            catch
            {
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            var demons = Console.ReadLine()
                         .Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);

            var result = new List <Demon>();

            foreach (var demon in demons)
            {
                var charSymbols = demon.Where(x => !char.IsDigit(x) && x != '+' && x != '-' && x != '*' && x != '/' && x != '.');

                var health = 0;
                foreach (var symbol in charSymbols)
                {
                    health += symbol;
                }

                var matches = Regex.Matches(demon, @"-?\d+\.?\d*");

                var damage = 0.0;
                foreach (Match match in matches)
                {
                    damage += double.Parse(match.Value);
                }

                var actions = demon.Where(x => x == '*' || x == '/');

                foreach (var action in actions)
                {
                    if (action == '*')
                    {
                        damage *= 2;
                    }
                    else if (action == '/')
                    {
                        damage /= 2;
                    }
                }

                var currentDemon = new Demon
                {
                    Name   = demon,
                    Health = health,
                    Damage = damage
                };

                result.Add(currentDemon);
            }

            foreach (var demon in result.Select(x => x).OrderBy(x => x.Name))
            {
                Console.WriteLine($"{demon.Name.Trim()} - {demon.Health} health, {demon.Damage:f2} damage ");
            }
        }
Ejemplo n.º 3
0
        public static void Main()
        {
            string[] input = Console.ReadLine().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

            Regex healthRegex = new Regex(@"[^\d\.\-\+\*\/]");
            Regex damageRegex = new Regex(@"[-|+]*[0.0-9]+");

            List <Demon> demonsList = new List <Demon>();

            for (int i = 0; i < input.Length; i++)
            {
                Demon currentDemon = new Demon {
                    Name = input[i]
                };

                MatchCollection healthMatches = healthRegex.Matches(input[i]);

                foreach (Match symbol in healthMatches)
                {
                    char[] matchChar = symbol.ToString().ToCharArray();
                    currentDemon.Health += matchChar[0];
                }

                MatchCollection damageMatches = damageRegex.Matches(input[i]);

                foreach (Match number in damageMatches)
                {
                    currentDemon.Damage += double.Parse(number.ToString());
                }

                // Checking every char of the demon's name if it is '*' or '/':
                char[] nameAsChars = input[i].ToCharArray();

                for (int j = 0; j < nameAsChars.Length; j++)
                {
                    if (nameAsChars[j].Equals('*'))
                    {
                        currentDemon.Damage *= 2;
                    }
                    else if (nameAsChars[j].Equals('/'))
                    {
                        currentDemon.Damage /= 2;
                    }
                }

                demonsList.Add(currentDemon);
            }

            foreach (Demon demon in demonsList.OrderBy(d => d.Name))
            {
                Console.WriteLine($"{demon.Name} - {demon.Health} health, {demon.Damage:F2} damage");
            }
        }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            List <Demon> demons = new List <Demon>();
            string       text   = Console.ReadLine();

            string[] demonsNames        = text.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
            string   healthPattern      = @"[^0-9+*\/.-]";
            string   baseDamagePattern  = @"[+-]?(?:(?:\d+\.\d+)|(?:\d+))";
            string   damageAlterPattern = @"[*\/]";

            foreach (var demonName in demonsNames)
            {
                int health = 0;
                {
                    var matches = Regex.Matches(demonName, healthPattern);
                    foreach (Match match in matches)
                    {
                        health += match.Value[0];
                    }
                }

                double damage = 0;
                {
                    var matches = Regex.Matches(demonName, baseDamagePattern);
                    foreach (Match match in matches)
                    {
                        damage += double.Parse(match.Value);
                    }
                    var altersSign = Regex.Matches(demonName, damageAlterPattern);
                    foreach (Match match in altersSign)
                    {
                        if (match.Value == "*")
                        {
                            damage *= 2;
                        }
                        else
                        {
                            damage /= 2;
                        }
                    }
                }

                Demon demon = new Demon(demonName, health, damage);
                demons.Add(demon);
            }

            foreach (var demon in demons.OrderBy(n => n.Name))
            {
                Console.WriteLine($"{demon.Name} - {demon.Health} health, {demon.Damage:F2} damage");
            }
        }
Ejemplo n.º 5
0
        internal static Demon Parse(string demonStr)
        {
            var damageRegex   = new Regex(@"-?\d+(?:\.\d+)?");
            var healthRegex   = new Regex(@"[^\d\-*\/\.]");
            var name          = demonStr;
            var health        = healthRegex.Matches(demonStr).Cast <Match>().Select(a => (int)Char.Parse(a.Value)).Sum();
            var damage        = damageRegex.Matches(demonStr).Cast <Match>().Select(a => decimal.Parse(a.Value)).ToList().Sum();
            var multiplyCount = demonStr.Count(a => a == '*');
            var devideCount   = demonStr.Count(a => a == '/');

            damage *= (int)Math.Pow(2, multiplyCount);
            damage /= (int)Math.Pow(2, devideCount);;
            var demon = new Demon
            {
                Name   = name,
                Health = health,
                Damage = damage
            };

            return(demon);
        }
Ejemplo n.º 6
0
        static void Main()
        {
            string[] demonNames = Console.ReadLine()
                                  .Split(",")
                                  .Select(x => x.Trim())
                                  .ToArray();

            List <Demon> demons = new List <Demon>();

            foreach (var name in demonNames)
            {
                Demon demon = new Demon(name);
                demons.Add(demon);
            }

            List <Demon> sorted = demons
                                  .OrderBy(x => x.Name)
                                  .ToList();

            foreach (var demon in sorted)
            {
                Console.WriteLine(demon.ToString());
            }
        }