Esempio n. 1
0
        private static void SetIncorrectTower(TowerProgram tower)
        {
            var rootChildSums = new List <int>();

            foreach (var child in tower.Children)
            {
                _sum = 0;
                AddChildSums(child);
                rootChildSums.Add(_sum + child.Weight);
            }

            var grouped = rootChildSums.GroupBy(weight => weight);

            if (grouped.Count() > 1)
            {
                var odd      = grouped.First(x => x.Count() == 1);
                var index    = rootChildSums.IndexOf(odd.Key);
                var foundOdd = tower.Children[index];

                var rest = grouped.First(x => x.Count() > 1);
                _difference = odd.Key - rest.Key;

                SetIncorrectTower(foundOdd);
            }
            else
            {
                _incorrectTower = tower;
            }
        }
Esempio n. 2
0
 private static void AddChildSums(TowerProgram tower)
 {
     _sum += tower.Children.Sum(x => x.Weight);
     foreach (var child in tower.Children)
     {
         AddChildSums(child);
     }
 }
Esempio n. 3
0
        private static List <TowerProgram> GetTowers(string[] data)
        {
            var towers       = new List <TowerProgram>();
            var tempChildren = new List <string[]>();

            foreach (var line in data)
            {
                var nameEnd = line.IndexOf(' ');
                var name    = line.Substring(0, nameEnd);

                var weightStart = line.IndexOf('(') + 1;
                var length      = line.IndexOf(')') - weightStart;
                var weight      = line.Substring(weightStart, length);

                var childrenStart = line.IndexOf("->");
                if (childrenStart != -1)
                {
                    tempChildren.Add(line.Substring(childrenStart + 3)
                                     .Replace(",", "")
                                     .Split(' '));
                }
                else
                {
                    tempChildren.Add(new string[0]);
                }

                var tower = new TowerProgram()
                {
                    Name     = name,
                    Weight   = int.Parse(weight),
                    Children = new List <TowerProgram>()
                };
                towers.Add(tower);
            }

            for (int i = 0; i < tempChildren.Count; i++)
            {
                foreach (var name in tempChildren[i])
                {
                    var result = towers.FirstOrDefault(x => x.Name == name);
                    towers[i].Children.Add(result);
                }
            }
            return(towers);
        }