Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Advent2018;
- import util.AdventOfCode;
- import java.util.ArrayList;
- import java.util.List;
- public class Day8 extends AdventOfCode {
- List<Integer> data;
- int total;
- TreeNode root = new TreeNode();
- public Day8(List<String> input) {
- super(input);
- }
- class TreeNode {
- List<TreeNode> children = new ArrayList<>();
- List<Integer> metaData = new ArrayList<>();
- int value() {
- if (children.size() == 0) {
- return metaData.stream()
- .mapToInt(x -> x)
- .sum();
- } else {
- int sum = 0;
- for (Integer meta : metaData) {
- if (meta <= children.size()) {
- TreeNode child = children.get(meta - 1);
- if (child != null) {
- sum += child.value();
- }
- }
- }
- return sum;
- }
- }
- }
- @Override
- public Object part1() {
- buildTree(0, root);
- return total;
- }
- int buildTree(int index, TreeNode current) {
- int children = data.get(index++);
- int metaData = data.get(index++);
- for (int i = 0; i < children; i++) {
- TreeNode child = new TreeNode();
- current.children.add(child);
- index = buildTree(index, child);
- }
- for (int i = 0; i < metaData; i++) {
- current.metaData.add(data.get(index + i));
- total += data.get(index + i);
- }
- return index + metaData;
- }
- @Override
- public Object part2() {
- return root.value();
- }
- @Override
- public void parse() {
- data = new ArrayList<>();
- String[] split = input.get(0).split(" ");
- for (String each : split) {
- data.add(Integer.parseInt(each));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement