Пример #1
0
        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);
        }
Пример #2
0
        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
        }