JSFiddle - React, Tailwind, and code Playground

JavaScript

let iteration = 0;

collectGems();

async function collectGems(speed = 1000) {
  if (speed <= 0) {
    console.log("You did it!");
    return;
  }

  const duration = await grind(speed);

  console.log("Iteration", iteration, "Grind Time (ms):", duration);
  
  iteration++;
  collectGems(speed - (10 + iteration**2));
}

function grind(speed) {
  const start = Date.now();
  return new Promise((resolve) => setTimeout(() => {
    const duration = Date.now() - start;
    resolve(duration)
  }, speed))
}