Exemple #1
0
        static void Main(string[] args)
        {
            var list  = new Dictionary <string, List <Dragon> >();
            var count = int.Parse(Console.ReadLine());

            for (int i = 0; i < count; i++)
            {
                var input = Console.ReadLine().Split();
                var type  = input[0];
                var name  = input[1];

                var damage = (input[2] != "null") ? int.Parse(input[2]) : 45;
                var health = (input[3] != "null") ? int.Parse(input[3]) : 250;
                var armor  = (input[4] != "null") ? int.Parse(input[4]) : 10;

                var dragon = new Dragon()
                {
                    Type   = type,
                    Name   = name,
                    Damage = damage,
                    Health = health,
                    Armor  = armor
                };

                list = Dragon.AddDragon(dragon, list);
            }

            foreach (var element in list)
            {
                var avrgDamage = AverageValue(element.Value, "damage").ToString("F");
                var avrgHealth = AverageValue(element.Value, "health").ToString("F");
                var avrgArmor  = AverageValue(element.Value, "armor").ToString("F");

                Console.WriteLine($"{element.Key}::({avrgDamage}/{avrgHealth}/{avrgArmor})");
                foreach (var dragon in element.Value)
                {
                    Console.WriteLine($"-{dragon.Name} -> damage: {dragon.Damage}, health: {dragon.Health}, armor: {dragon.Armor}");
                }
            }
        }
        public static void Main()
        {
            var n       = int.Parse(Console.ReadLine());
            var pattern = @"(.+?) (.+?) (.+?) (.+?) (.+)";

            var result = new Dictionary <string, Dictionary <string, Dragon> >();

            for (int i = 0; i < n; i++)
            {
                var inputLine = Console.ReadLine();
                if (!Regex.IsMatch(inputLine, pattern))
                {
                    continue;
                }

                var regex = new Regex(pattern);
                var match = regex.Match(inputLine);

                var currentColor = match.Groups[1].ToString();
                var currentName  = match.Groups[2].ToString();
                var currentDmg   = 0;
                if (match.Groups[3].ToString() == "null")
                {
                    currentDmg = 45;
                }
                else
                {
                    currentDmg = int.Parse(match.Groups[3].ToString());
                }
                var currentHealth = 0;
                if (match.Groups[4].ToString() == "null")
                {
                    currentHealth = 250;
                }
                else
                {
                    currentHealth = int.Parse(match.Groups[4].ToString());
                }
                var currentArmor = 0;
                if (match.Groups[5].ToString() == "null")
                {
                    currentArmor = 10;
                }
                else
                {
                    currentArmor = int.Parse(match.Groups[5].ToString());
                }


                if (!result.ContainsKey(currentColor))
                {
                    result[currentColor] = new Dictionary <string, Dragon>();
                }
                if (!result[currentColor].ContainsKey(currentName))
                {
                    result[currentColor][currentName] = new Dragon();
                }
                result[currentColor][currentName] = new Dragon()
                {
                    Damage = currentDmg,
                    Health = currentHealth,
                    Armor  = currentArmor
                };
            }



            foreach (var color in result)
            {
                double avgDmg   = 0;
                double countDmg = 0;
                foreach (var dragon in color.Value)
                {
                    avgDmg += dragon.Value.Damage;
                    countDmg++;
                }
                avgDmg /= countDmg;

                double avgHealth   = 0;
                double countHealth = 0;
                foreach (var dragon in color.Value)
                {
                    avgHealth += dragon.Value.Health;
                    countHealth++;
                }
                avgHealth /= countHealth;


                double avgArmor   = 0;
                double countArmor = 0;
                foreach (var dragon in color.Value)
                {
                    avgArmor += dragon.Value.Armor;
                    countArmor++;
                }
                avgArmor /= countArmor;

                Console.WriteLine($"{color.Key}::({avgDmg:F2}/{avgHealth:F2}/{avgArmor:F2})");


                var orderedDragons = result[color.Key].OrderBy(a => a.Key).ToDictionary(a => a.Key, a => a.Value);

                foreach (var dragon in orderedDragons)
                {
                    Console.WriteLine($"-{dragon.Key} -> damage: {dragon.Value.Damage}, health: {dragon.Value.Health}, armor: {dragon.Value.Armor}");
                }
            }
        }
Exemple #3
0
        public static void Main()
        {
            byte numberOfDragons = byte.Parse(Console.ReadLine());
            Dictionary <string, Dictionary <string, Dragon> > dragonLog = new Dictionary <string, Dictionary <string, Dragon> >();

            string[] defaultValues = new string[] { "45", "250", "10" };

            for (byte i = 0; i < numberOfDragons; i++)
            {
                string[] dragonInput = Console.ReadLine().Split();

                for (int index = 2; index < dragonInput.Length; index++)
                {
                    if (dragonInput[index] == "null")
                    {
                        dragonInput[index] = defaultValues[index - 2];
                    }
                }

                string dragonType = dragonInput[0];
                string dragonName = dragonInput[1];
                int    damage     = int.Parse(dragonInput[2]);
                int    health     = int.Parse(dragonInput[3]);
                int    armor      = int.Parse(dragonInput[4]);

                Dragon dragon = new Dragon()
                {
                    Name   = dragonName,
                    Damage = damage,
                    Health = health,
                    Armor  = armor
                };

                if (!dragonLog.ContainsKey(dragonType))
                {
                    dragonLog[dragonType] = new Dictionary <string, Dragon>();
                }

                if (!dragonLog[dragonType].ContainsKey(dragonName))
                {
                    dragonLog[dragonType][dragonName] = dragon;
                }
                else
                {
                    dragonLog[dragonType][dragonName].Damage = damage;
                    dragonLog[dragonType][dragonName].Health = health;
                    dragonLog[dragonType][dragonName].Armor  = armor;
                }
            }


            foreach (var pair in dragonLog)
            {
                double averageDamage = pair.Value.Values.Average(d => d.Damage);
                double averageHealth = pair.Value.Values.Average(h => h.Health);
                double averageArmor  = pair.Value.Values.Average(a => a.Armor);

                Console.WriteLine($"{pair.Key}::({averageDamage:F2}/{averageHealth:F2}/{averageArmor:F2})");

                var dragons = pair.Value;
                foreach (var dragonPair in dragons.OrderBy(name => name.Key))
                {
                    Console.WriteLine($"-{dragonPair.Key} -> damage: {dragonPair.Value.Damage}, health: {dragonPair.Value.Health}, armor: {dragonPair.Value.Armor}");
                }
            }
        }