Exemple #1
0
        /*
         *  0   2            7   9
         *  2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2
         *  A----------------------------------
         *      B----------- C-----------
         *                       D-----
         */

        private int CalculateRootNode(string[] inputNumbers, int i, out Node08 node)
        {
            node = CreateNode(i, inputNumbers);

            int metaData = 0;

            if (node.NrOfChildren == 0)
            {
                metaData = i + 2;
            }
            else
            {
                var childNodeIndex = i + 2;
                metaData = childNodeIndex;
                for (int j = 0; j < node.NrOfChildren; j++)
                {
                    metaData = CalculateRootNode(inputNumbers, metaData, out Node08 childNode);
                    node.ChildNodes.Add(childNode);
                }
            }

            AddMetaData(node, metaData, inputNumbers);

            return(metaData + node.NrOfMetaData);
        }
Exemple #2
0
        public static Node08 CreateNode(int i, string[] inputNumbers)
        {
            int nrOfChildren = int.Parse(inputNumbers[i]);
            int nrOfMetadata = int.Parse(inputNumbers[i + 1]);
            var node         = new Node08(nrOfChildren, nrOfMetadata);

            return(node);
        }
Exemple #3
0
 public void AddMetaData(Node08 node, int index, string[] inputNumbers)
 {
     for (int m = 0; m < node.NrOfMetaData; m++)
     {
         int metaData = int.Parse(inputNumbers[index + m]);
         node.MetaData.Add(metaData);
         sum += metaData;
     }
 }
Exemple #4
0
        public int CalculateSumOfRootNode(string input)
        {
            var inputNumbers = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            var    i    = 0;
            Node08 node = null;

            i = CalculateRootNode(inputNumbers, i, out node);

            return(node.Value);
        }