Exemple #1
0
        internal static void CalculatePart1()
        {
            StreamReader reader = new StreamReader("input07.txt");

            //Create Programs
            List <Discprogram> discprograms = new List <Discprogram>();

            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                discprograms.Add(new Discprogram(line));
            }

            //Match Childreleations
            foreach (Discprogram disc in discprograms)
            {
                //Find parent
                Discprogram parent = discprograms.Where(d => d.ChildrensNames.Contains(disc.Name)).SingleOrDefault();
                if (parent != null)
                {
                    parent.AddChildren(disc);
                }
            }

            //Output the root Program
            Discprogram root = discprograms.Where(d => d.Parent == null).Single();

            Console.WriteLine(root.Name);
        }
Exemple #2
0
        internal static void CalculatePart2()
        {
            StreamReader reader = new StreamReader("input07.txt");

            //Create Programs
            List <Discprogram> discprograms = new List <Discprogram>();

            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                discprograms.Add(new Discprogram(line));
            }

            //Match Childreleations
            foreach (Discprogram disc in discprograms)
            {
                //Find parent
                Discprogram parent = discprograms.Where(d => d.ChildrensNames.Contains(disc.Name)).SingleOrDefault();
                if (parent != null)
                {
                    parent.AddChildren(disc);
                }
            }

            //Find the program with the wrong weight
            Discprogram root = discprograms.Where(d => d.Parent == null).Single();

            Console.WriteLine("The first mentioned program is the one with the wrong weight since it has the lowest level:");
            root.CheckWeight();
        }
Exemple #3
0
        internal void CheckWeight()
        {
            foreach (Discprogram child in Children)
            {
                child.CheckWeight();
            }

            if (Children.Count > 0)
            {
                if (Children.Average(c => c.WeightIncludingChildren) == Children.First().WeightIncludingChildren)
                {
                    //Children are in Balance
                }
                else
                {
                    Dictionary <int, int> keys = new Dictionary <int, int>();

                    foreach (Discprogram child in Children)
                    {
                        if (keys.ContainsKey(child.WeightIncludingChildren))
                        {
                            keys[child.WeightIncludingChildren]++;
                        }
                        else
                        {
                            keys.Add(child.WeightIncludingChildren, 1);
                        }
                    }
                    int         wrongWeight      = keys.Where(k => k.Value == 1).Single().Key;
                    int         desiredWeight    = keys.Where(k => k.Value != 1).First().Key;
                    Discprogram wrongProgram     = Children.Where(c => c.WeightIncludingChildren == wrongWeight).Single();
                    int         newWeightOfChild = wrongProgram.Weight + desiredWeight - wrongWeight;

                    Console.WriteLine($"Not Balanced: {this.Name}, childname: {wrongProgram.Name} new weight: {newWeightOfChild}");
                }
            }
        }
Exemple #4
0
 public void AddChildren(Discprogram child)
 {
     child.Parent = this;
     Children.Add(child);
 }