static void Main(string[] args) { List <Demon> allDemons = new List <Demon>(); var demons = Console.ReadLine() .Split(", ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) .Select(d => d.Trim()) .ToArray(); foreach (string demon in demons) { var health = Regex.Matches(demon, @"[^0-9\+\-\.\*\/]") .Cast <Match>() .Select(m => m.Value) .Sum(c => (int)char.Parse(c)); var damage = Regex.Matches(demon, @"-?[0-9]+(\.[0-9]+)?") .Cast <Match>() .Select(m => decimal.Parse(m.Value)) .Sum(c => c); for (int i = 0; i < demon.Length; i++) { if (demon[i] == '*') { damage *= 2; } else if (demon[i] == '/') { damage /= 2; } } var currentDemon = new Demon { Name = demon, Health = health, Damage = damage }; if (allDemons.All(d => d.Name != currentDemon.Name)) { allDemons.Add(currentDemon); } } foreach (var demon in allDemons.OrderBy(d => d.Name)) { Console.WriteLine(demon); } }
static void Main(string[] args) { string[] inputData = Console.ReadLine().Split(new[] { ',', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); List <Demon> allDemons = new List <Demon>(); for (int i = 0; i < inputData.Length; i++) { if (Regex.IsMatch(inputData[i], @"[^\+\/\.\-\*0-9]")) { Demon currentDemon = new Demon(); currentDemon.Name = inputData[i]; string patternHlth = @"[^\+\/\.\-\*0-9]+"; MatchCollection matchesHlth = Regex.Matches(inputData[i], patternHlth); StringBuilder sb = new StringBuilder(); foreach (Match item in matchesHlth) { sb.Append(item); } int sumHealth = sb.ToString().Select(y => (int)(Convert.ToChar(y))).Sum(); currentDemon.Health = sumHealth; string patternDmg = @"((\+|\-)*(([0-9]+\.)?[0-9]+))"; MatchCollection matchesDmg = Regex.Matches(inputData[i], patternDmg); double sumNums = matchesDmg.Cast <Match>().Select(x => double.Parse(x.Value)).Sum(); string patternDmgCmd = @"[\*\/]"; MatchCollection matchesCmd = Regex.Matches(inputData[i], patternDmgCmd); foreach (Match cmd in matchesCmd) { if (cmd.Value == "*") { sumNums *= 2.0; } else { sumNums /= 2.0; } } currentDemon.Damage = sumNums; allDemons.Add(currentDemon); } } foreach (var demon in allDemons.OrderBy(x => x.Name)) { Console.WriteLine($"{demon.Name} - {demon.Health} health, {demon.Damage:f2} damage"); } }