function* q2(input) {
const t0 = performance.now();
let numbers = {};
let turn = 0;
while (turn < input.length) {
numbers[input[turn]] = [turn, turn];
turn++;
}
let distance = input[turn - 1];
while (turn < 30000000) {
const lastSpoken = numbers[distance];
distance = lastSpoken[0] - lastSpoken[1];
const dLastSpoken = numbers[distance];
if (dLastSpoken) {
dLastSpoken[1] = dLastSpoken[0];
dLastSpoken[0] = turn;
} else numbers[distance] = [turn, turn];
turn++;
if (turn % 500000 === 0)
yield { turn, distance, numbers, time: (performance.now() - t0) / 1000 };
}
yield { turn, distance, numbers, time: (performance.now() - t0) / 1000 };
}