function processStream(stream) {
let state = states.inGroup;
let [depth, score, gCount] = [0, 0, 0];
for (const char of stream) {
switch (state) {
case states.inGroup:
if (char === "{") {
depth++;
} else if (char === "}") {
score += depth--;
} else if (char === "<") {
state = states.inGarbage;
}
break;
case states.inGarbage:
if (char === ">") {
state = states.inGroup;
} else if (char === "!") {
state = states.ignoreNext;
} else {
gCount++;
}
break;
case states.ignoreNext:
state = states.inGarbage;
break;
}
}
return { score, gCount };
}