Advertisement
Guest User

Untitled

a guest
Dec 8th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.97 KB | None | 0 0
  1. package Advent2018;
  2.  
  3. import util.AdventOfCode;
  4.  
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. public class Day8 extends AdventOfCode {
  9.  
  10.     List<Integer> data;
  11.     int total;
  12.     TreeNode root = new TreeNode();
  13.  
  14.     public Day8(List<String> input) {
  15.         super(input);
  16.     }
  17.  
  18.     class TreeNode {
  19.         List<TreeNode> children = new ArrayList<>();
  20.         List<Integer> metaData = new ArrayList<>();
  21.  
  22.         int value() {
  23.             if (children.size() == 0) {
  24.                 return metaData.stream()
  25.                         .mapToInt(x -> x)
  26.                         .sum();
  27.             } else {
  28.                 int sum = 0;
  29.                 for (Integer meta : metaData) {
  30.                     if (meta <= children.size()) {
  31.                         TreeNode child = children.get(meta - 1);
  32.                         if (child != null) {
  33.                             sum += child.value();
  34.                         }
  35.                     }
  36.                 }
  37.                 return sum;
  38.             }
  39.         }
  40.     }
  41.  
  42.     @Override
  43.     public Object part1() {
  44.         buildTree(0, root);
  45.         return total;
  46.     }
  47.  
  48.     int buildTree(int index, TreeNode current) {
  49.         int children = data.get(index++);
  50.         int metaData = data.get(index++);
  51.         for (int i = 0; i < children; i++) {
  52.             TreeNode child = new TreeNode();
  53.             current.children.add(child);
  54.             index = buildTree(index, child);
  55.         }
  56.         for (int i = 0; i < metaData; i++) {
  57.             current.metaData.add(data.get(index + i));
  58.             total += data.get(index + i);
  59.         }
  60.         return index + metaData;
  61.  
  62.     }
  63.  
  64.     @Override
  65.     public Object part2() {
  66.         return root.value();
  67.     }
  68.  
  69.     @Override
  70.     public void parse() {
  71.         data = new ArrayList<>();
  72.         String[] split = input.get(0).split(" ");
  73.         for (String each : split) {
  74.             data.add(Integer.parseInt(each));
  75.         }
  76.     }
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement