function evaluateIntcode(prog, pos = 0) {
const [opcode, p1, p2, d] = prog.slice(pos, pos + 4);
switch (opcode) {
case 1:
prog[d] = prog[p1] + prog[p2];
break;
case 2:
prog[d] = prog[p1] * prog[p2];
break;
case 99:
return prog;
default:
throw new Error(`Invalid opcode '${opcode}' at ${pos}`);
}
return evaluateIntcode(prog, pos + 4);
}