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