Equd

AdventOfCode 2018 Day 08

Dec 8th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.60 KB | None | 0 0
  1. void Main()
  2. {
  3.     //Test values
  4.     int r = 0;
  5.     var test = "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2";
  6.     var testNode = new Node(Parse(test), ref r, 'A');
  7.    
  8.    
  9.     //actual Test
  10.     if(testNode.answerA != 138) throw new Exception("failed a");
  11.     if(testNode.answerB != 066) throw new Exception("failed b");
  12.  
  13.    
  14.     //get data 
  15.     var aoc = new AdventOfCode(2018, 8);
  16.    
  17.     //reset index
  18.     r = 0;
  19.     //create node
  20.     var n = new Node(Parse(aoc.InputLines[0]), ref r, 'A');
  21.    
  22.     //submit answers
  23.     aoc.SubmitAnswer(n.answerA, Part.A);
  24.     aoc.SubmitAnswer(n.answerB, Part.B);
  25.    
  26. }
  27.  
  28.  
  29. //convert input to int array
  30. int[] Parse(string s) => s.Split(' ').Select(x => int.Parse(x)).ToArray();
  31.  
  32. class Node
  33. {  
  34.     public Node[] childs;
  35.     public int[] metaData;
  36.  
  37.     //get all metadata sum and of childeren
  38.     public int answerA => metaData.Sum() + childs.Sum(x => x.answerA);
  39.  
  40.     public int answerB
  41.     {
  42.         get
  43.         {
  44.             //no children then metadata sum
  45.             if(childs.Length == 0)
  46.             {
  47.                 return metaData.Sum(); 
  48.             }
  49.             else
  50.             {   //children use index -1 as source.
  51.                 int sum = 0;
  52.                 foreach (var index in metaData)
  53.                 {
  54.                     if(index - 1< childs.Length)
  55.                         sum += childs[index - 1].answerB;
  56.                    
  57.                 }
  58.                 return sum;
  59.             }
  60.         }
  61.     }
  62.    
  63.     public Node(int[] input, ref int p, char Name)
  64.     {                      
  65.         //DETERMINE amounts
  66.         this.childs = new Node[input[p++]];
  67.         this.metaData = new int[input[p++]];
  68.        
  69.         //fill node
  70.         for(int i = 0; i < childs.Length; i++)     
  71.             this.childs[i] = new Node(input, ref p, (char) (Name + 1 + i));
  72.            
  73.         //fill metadata
  74.         for(int i = 0; i < metaData.Length; i++)
  75.             this.metaData[i] = input[p++];
  76.        
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment