private static TreeElement BuildTree(List <ListElement> listElements, int index) { TreeElement TestElement = new TreeElement(listElements[index].Name, listElements[index].Weight); // Die Childindizes sammeln um alle anzuhängen List <int> ChildIndices = new List <int>(); foreach (var child in listElements[index].Children) { ChildIndices.Add(FindIndex(listElements, child)); } foreach (var childIndex in ChildIndices) { TestElement.Add(listElements[childIndex].Name, listElements[childIndex].Weight); } foreach (var child in TestElement.Children) { AddChildren(listElements, child); } return(TestElement); }
public static void Part2() { string[] Lines = File.ReadAllLines("/Users/jakobbussas/Projects/AdventOfCode/Day7/Day7/Day7.txt"); List <ListElement> ListElements = new List <ListElement>(); string TempName; int TempWeigth; string[] TempChildren; for (int i = 0; i < Lines.Length; i++) { TempName = Lines[i].Split(' ')[0].Trim(); TempWeigth = Convert.ToInt32(Lines[i].Split('(')[1].Split(')')[0]); if (Lines[i].Contains("->")) { TempChildren = Lines[i].Split('>')[1].Trim().Split(','); } else { TempChildren = new string[0]; } for (int j = 0; j < TempChildren.Length; j++) { TempChildren[j] = TempChildren[j].Trim(); } ListElements.Add(new ListElement(TempName, TempWeigth)); foreach (var element in TempChildren) { ListElements[ListElements.Count - 1].Children.Add(element); } } // Jetzt Tree bauen //foreach (var element in ListElements) //{ // Console.WriteLine(element); //} TreeElement Test = BuildTree(ListElements, FindIndex(ListElements, "cqmvs")); Console.WriteLine(Test.Name); //Test.PrintTree(); // Ungleichgewicht ermitteln //int[] Cuckoo = new int[2]; // Der Index vom Kind mit dem falschen Gewicht //List<int> Temp1 = new List<int>(); //Temp1.Add(Test.Children[0].Weight); //List<int> Temp2 = new List<int>(); //for (int i = 1; i < Test.Children.Count; i++) //{ // if(Test.Children[i].Weight == Temp1[0]) { // Temp1.Add(i); // } else { // Temp2.Add(i); // } //} //Cuckoo[1] = -1; //if(Temp1.Count > Temp2.Count) { // Cuckoo[0] = Temp2[0]; //} else if(Temp1.Count < Temp2.Count) { // Cuckoo[0] = Temp1[0]; //} else { // Beide müssen geprüft werden // Cuckoo[0] = Temp1[0]; // Cuckoo[1] = Temp2[0]; //} //// Weiter prüfen... //if(Cuckoo[1] == -1) { // // Check den Tree mit dem Index //} else { // // Checke beide Trees mit den Indizes //} foreach (var child in Test.Children) { Console.WriteLine(child.Name + ": ∑ = " + child.GetTotalWeight()); } // Test var Ungleich = Test.GetElementByName("vmttcwe"); Console.WriteLine(Ungleich.Name + ": ∑" + Ungleich.GetTotalWeight() + ", normal: " + Ungleich.Weight); foreach (var child in Ungleich.Children) { Console.WriteLine(child.Name + ": ∑" + child.GetTotalWeight() + ", normal: " + child.Weight); } string SchlingelName = Test.FindInequality().Name; TreeElement Schlingel = Test.GetElementByName(SchlingelName); Console.WriteLine(Schlingel.Name + " ist der Übeltäter"); Console.WriteLine("Schlingelgewicht: " + Schlingel.Weight + ", ∑: " + Schlingel.GetTotalWeight()); Console.WriteLine("Schlingelkinder:"); foreach (var child in Schlingel.Children) { Console.WriteLine(child.Name + ": " + child.Weight + ", ∑: " + child.GetTotalWeight()); } // Irgendwas hier ist unfassbar faul // Jedes eleement hat keine Parents oh mein Gott ich dummer Spast ich weiß auch wieso... // Trotzdem ist noch was faul, es wird irgendwie nicht der korrekte Branch verfolgt // ich logge gleich mal noch ein bisschen Test.PrintTree(); // 8 is wrong // 2310 }