JSFiddle - React, Tailwind, and code Playground
JavaScript
var solver1 = (state={sum: 0, index: 0}, hasParent=false, input) => {
input = input || document.body.childNodes[0].innerHTML.trim().split(' ');
if (state.index >= input.length) {
return state.sum;
}
let childCount = Number(input[state.index++]);
let metaCount = Number(input[state.index++]);
for (let i = 0; i < childCount; i++) {
let childRes = solver(state, true, input);
}
for (let i = 0; i < metaCount; i++) {
state.sum += Number(input[state.index++]);
}
if (!hasParent) {
return solver(state, input);
}
}
solver1();
var solver2 = (state={index: 0}, hasParent=false, input) => {
input = input || document.body.childNodes[0].innerHTML.trim().split(' ');
if (state.index >= input.length) {
throw new Error('Bad Input. Exceeds bounds.')
}
let childCount = Number(input[state.index++]);
let metaCount = Number(input[state.index++]);
let childrenSum = [];
for (let i = 0; i < childCount; i++) {
childrenSum.push(solver2(state, true, input));
}
let sum = 0;
for (let i = 0; i < metaCount; i++) {
if (childCount === 0) {
sum += Number(input[state.index++]);
} else {
let childIndex = input[state.index++];
sum += childrenSum[childIndex - 1] || 0;
}
}
return sum;
}
solver2();