83. intervalを作る

JavaScript TikTok Meta

少し工夫が必要  - accepted / - tried

mySetInterval(a, b)を実装してください。window.setInterval()と違って、間隔が固定ではなくどんどん長くなっていく、間隔はこう計算すると良い → period = a + b * count

let prev = Date.now()const func = () => {  const now = Date.now()  console.log('roughly ', Date.now() - prev)  prev = now}const id = mySetInterval(func, 100, 200)// 概ね100、100 + 200 * 0// 概ね400、100 + 200 * 1// 概ね900、100 + 200 * 2// 概ね1600、100 + 200 * 3
....
myClearInterval(id) // intervalを止める
  1. mySetInterval(delay, period)delayは1回目に使われ、その後periodは重なっていく。

  2. window.setTimeoutと window.clearTimeoutは精確ではないから、入力したコードをジャッジするときに、他の実装に入れ替えられます。interfaceが一緒にで、気にしなくて良い。

概ね以下のようにジャッジされます。(参考だけで、把握しなくても良い)

let currentTime = 0const run = (delay, period, clearAt) => {  currentTime = 0  pipeline.length = 0    const logs = []  const func = () => {    logs.push(currentTime)  }  mySetInterval(func, delay, period)  if (clearAt !== undefined) {    setTimeout(() => {      myClearInterval(id)    }, clearAt)  }  while (pipeline.length > 0 && calls.length < 5) {    const [time, callback] = pipeline.shift()    currentTime = time    callback()  }  return calls}expect(run(100, 200)).toEqual([100,400,900,1600,2500])expect(run(100, 200, 450)).toEqual([100,400])expect(run(100, 200, 50)).toEqual([])

常にもっといい方法を求めよう。