var input = require("fs").readFileSync("input.txt").toString().replace("\n", ""); var nums = input.split(" ").map(a=>(parseInt(a))); function parseTree(ints){ var numChildren = ints[0]; var numMeta = ints[1]; var children = []; var i = 0; while(numChildren > 0){ var childParsed = parseTree(ints.slice(2 + i)); i += childParsed[1].length; children.push(childParsed[0]); numChildren--; } return [{children: children, meta: ints.slice(2+i, 2+i+numMeta)}, ints.slice(0, 2+i+numMeta)] } function treeMetaTotal(tree){ var total = 0; for(var child of tree.children){ total += treeMetaTotal(child); } total += tree.meta.reduce((a,b)=>(a+b)); return total; } console.log(treeMetaTotal(parseTree(nums)[0]));