コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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");
            }
        }