Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- //Test values
- int r = 0;
- var test = "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2";
- var testNode = new Node(Parse(test), ref r, 'A');
- //actual Test
- if(testNode.answerA != 138) throw new Exception("failed a");
- if(testNode.answerB != 066) throw new Exception("failed b");
- //get data
- var aoc = new AdventOfCode(2018, 8);
- //reset index
- r = 0;
- //create node
- var n = new Node(Parse(aoc.InputLines[0]), ref r, 'A');
- //submit answers
- aoc.SubmitAnswer(n.answerA, Part.A);
- aoc.SubmitAnswer(n.answerB, Part.B);
- }
- //convert input to int array
- int[] Parse(string s) => s.Split(' ').Select(x => int.Parse(x)).ToArray();
- class Node
- {
- public Node[] childs;
- public int[] metaData;
- //get all metadata sum and of childeren
- public int answerA => metaData.Sum() + childs.Sum(x => x.answerA);
- public int answerB
- {
- get
- {
- //no children then metadata sum
- if(childs.Length == 0)
- {
- return metaData.Sum();
- }
- else
- { //children use index -1 as source.
- int sum = 0;
- foreach (var index in metaData)
- {
- if(index - 1< childs.Length)
- sum += childs[index - 1].answerB;
- }
- return sum;
- }
- }
- }
- public Node(int[] input, ref int p, char Name)
- {
- //DETERMINE amounts
- this.childs = new Node[input[p++]];
- this.metaData = new int[input[p++]];
- //fill node
- for(int i = 0; i < childs.Length; i++)
- this.childs[i] = new Node(input, ref p, (char) (Name + 1 + i));
- //fill metadata
- for(int i = 0; i < metaData.Length; i++)
- this.metaData[i] = input[p++];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment