/* * 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); }
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); }
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; } }
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); }