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}"); } } }
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}"); } } }