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); }
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(); }
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}"); } } }
public void AddChildren(Discprogram child) { child.Parent = this; Children.Add(child); }